#1 13.03.11 14:46
Помогите исправить ошибку
Код::
void encoding(char alEn[], int aSize)
{
char keyword[5]; // ключ
int keyNum[5]; // массив порядковых номеров символов ключа
char oText[200]; // открытый текст
char cryptogram[200]; // криптограмма
int otLen; // количество символов в открытом тексте [и криптограмме]
int i=0,k=0,m=0; // счетчики
int symPos; // позиции символов криптограммы в алфавите
printf("Type a message, separating words with underbars: "); // вводим открытый текст
gets(oText);
otLen=strlen(oText); // считаем количество символов в нем
printf("Choose a key word [5 letters long]: "); // выбераем ключ
gets(keyword);
while(m<5) // формируем массив для ключа
{
while(keyword[m]!=alEn[i]) // пока не найдем символ ключа в алфавите
i++;
keyNum[m]=i+1; // запоминаем позицию
i=0;
m++;
}
m=0;
while(i<otLen) // собственно кодировка: пока не обработаем все сообщение
{
while(oText[i]!=alEn[k]) // пока не найдем символ
k++;
if(m>4) // зацикливаем ключ
m=0;
symPos=(k+1)+keyNum[m]; // позиция кодирующего символа в алфавите
if(symPos>aSize) // сложение по модулю
symPos=symPos-aSize;
m++;
cryptogram[i]=alEn[symPos-1]; // формируем криптограмму
symPos=0;
i++;
k=0;
}
printf("Encrypted message: ");
for(int e=0;e<otLen;e++)
printf("%c",cryptogram[e]);
printf("\n");
}часть программы, кодирование шифром виженера... вроде работает, но выдает ошибку такого типа:
Run-Time Check Failure #2 - Stack around the variable 'keyword' was corrupted.
в чем проблема, не могу понять..
Offline
#2 13.03.11 15:13
Re: Помогите исправить ошибку
в с++ есть фишка, что символ окончания строки записывается в сам массив, поэтому длинна масива должна быть на 1 больше, чем слово которое ты туда записываешь. вроде так. т.е. 'keyword' должен быть длины 6. ну и все остальные строковые массивы тоже.
Offline

