Ciao a tutti, questo è il mio primo post su questo forum e ne approfitto subito per esporvi un mio problema.
Sto creando per esercitazione un programma di criptazione in c++ basato sul cifrario di Vigènere eccone il codice:
codice:
#include <iostream>
#include <string>
using namespace std;
std::string cripta (string chiave, string tst);
int main ()
{
cout << "Inserisci la parola chiave: ";
string pChiave;
cin >> pChiave;
cout << "\nInserisci il testo:" << endl;
string testo;
cin >> testo;
cripta(pChiave, testo);
system("pause");
}
std::string cripta(string chiave, string tst)
{
string criptato = "Programma non ancora terminato";
char tab[257][257];
int n = 0;
for(int i = 0; i < 257; i++)
{
for(int k = 0; k < 257; k++)
{
tab[i][k] = (char)n;
n++;
}
}
string tstChiave;
for(int a = 0; a < tst.size(); ++a) // linea 34
{
for(int b = 0; b < chiave.size(); ++b) // linea 36
{
tstChiave[a] = chiave[b];
a++;
}
}
return tst;
}
Il programma non è ancora completato, ma mentre provavo a vedere se il lavoro finora svolto funzionava, durante la compilazione, sono incappato in due "warnings" qui riportati:
main.cpp(34) : warning C4018: '<': errata corrispondenza tra signed e unsigned
main.cpp(36) : warning C4018: '<': errata corrispondenza tra signed e unsigned
Informandomi su google ho scoperto che questo avviso viene inviato dal compilatore quando si tenta di confrontare una variabile signed con una unsigned (cosa facilmente deducibile dal messaggio di errore).
A quanto ne so, con variabile signed si intende una variabile appunto con segno (negativo o positivo), con unsigned una senza segno.
Ho provato quindi ha ridichiarare la variabile aggiungendole "unsigned" e, come ci si aspettava, alla compilazione non mi è giunto nessun messaggio di avviso o di errore dal compilatore.
Il problema vero e proprio è sorto quando ho provato a eseguire il programma:
Alla chiamata della funzione si interrompe tutto e viene visualizzato il seguente messaggio di errore:

A quanto pare dovrebbe significare che sto tentando di accedere a un elemento di un'array di indice o troppo grande (lo escludo perchè ho utilizzato delle string) o troppo piccolo (negativo).
Sospetto che in qualche modo le variabili a e b contengano valori negativi, in questo modo si spiegherebbero sia i due warnings che l'errore in run-time.
Ma come è possibile?
Può darsi che si tratti di un qualche errore idiota che non ho visto, ma proprio non ci arrivo, potreste aiutarmi voi?
Grazie in anticipo...