Я создаю шифр Vigenere в C ++, и когда я запускаю код, появляется сообщение об ошибке: (Нажмите «Повторить» для отладки приложения)
ConsoleApplication2.exe вызвал точку останова.
Ошибка отладки!
Программа: C: \ Windows \ system32 \ MSVCP140D.dll
Файл: c: \ program files (x86) \ Microsoft Visual Studio 14.0 \ vc \ include \ xstring
Линия: 1681
Выражение: строковый индекс вне диапазона
Для получения информации о том, как ваша программа может вызвать утверждение
ошибка, см. документацию по Visual C ++ для подтверждений.
(Нажмите «Повторить» для отладки приложения)
ConsoleApplication2.exe вызвал точку останова.
Программа «[3668] ConsoleApplication2.exe» вышла с кодом -1073741510 (0xc000013a).
вот код:
#include <iostream>
#include <string>
#include "stdafx.h"
using namespace std;
int main()
{
string plaintext, key, Result;
int k = 0;
cout << "Enter the plain text: ";
cin >> plaintext;
cout << "Enter the key word: ";
cin >> key;
for (int i=0; i<plaintext.length(); i++)
{
Result[i] = (((plaintext[i] - 97) + (key[k] - 97)) % 26) + 97;
k++;
if (k == 6)
(k = 0);
}
cout << " \n\n\n";
for (int i=0; i<plaintext.length(); i++)
cout <<" "<< Result[i];
cout << "\n\n\n\n";
return 0;
}
Ошибка в заявлении for for (int i=0; i<plaintext.length(); i++)
это что-то говорит о < подписать и я не знаю почему. Любая помощь? Спасибо 🙂
Вы никогда не устанавливаете размер для Result
так что любой i
вы используете в
Result[i] = (((plaintext[i] - 97) + (key[k] - 97)) % 26) + 97;
является недействительным. Вы должны сначала установить размер для Result
, Вы могли бы использовать что-то вроде
string plaintext, key, Result;
int k = 0;
cout << "Enter the plain text: ";
cin >> plaintext;
cout << "Enter the key word: ";
cin >> key;
Result.resize(plaintext.size());
//...
В заявлении
key[k]
Как вы проверяете, что индекс k < key.length()
? Переменная k
ограничен в [0,5], но откуда вы знаете, что key.length () < 5′ ?