Официальный сайт студ.городка НГТУ
Программирование и БД » Помогите исправить ошибку 

#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

#3  13.03.11 15:14

Re: Помогите исправить ошибку

А какой длины ключ при этом вводится?

--
А, вижу, 5. Ну тогда конечно 6 должно быть, правда, gets лучше вообще не использовать.

Исправлено OCTAGRAM (13.03.11 15:15)

Offline

#4  13.03.11 16:24

Re: Помогите исправить ошибку

длина ключа всегда одна - 5 символов.. так просто массив для ключа и для keyNum поставить [6] да и все?)

Исправлено Aguero (13.03.11 16:26)

Offline

Программирование и БД » Помогите исправить ошибку 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.039 сек.
Выполнено 14 запросов.