0

Я создаю шифр vigenere в C++, и когда я запускаю код, он имеет ошибку: (Нажмите «Повторить попытку для отладки приложения») ConsoleApplication2.exe вызвал точку останова. Ошибка отладки! программы: C: \ Windows \ system32 \ MSVCP140D.dll Файл: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ Include \ xstring Line: 1681 Выражение: строка подстрочный из диапазона Для получения дополнительной информации о том, как ваша программа может вызвать ошибку , см. документацию Visual C++ в отношении утверждений. (Нажмите «Повторить», чтобы отладить приложение) ConsoleApplication2.exe вызвал точку останова. Программа '[3668] ConsoleApplication2.exe' вышла с кодом -1073741510 (0xc000013a). вот код:Ошибка Vigenere Cipher в C++

#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; 
} 

Ошибка в заявлении для он говорит что-то о < знак, и я не знаю, почему. Любая помощь? Спасибо :)

ответ

0

Вы никогда не установить размер для 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()); 
//... 
+0

Да и это! :) – systemcpro

+0

Мне нужно скопировать этот Result.resize (plaintext.size()); или есть еще? @NathanOliver –

+0

@warren от того, что я видел, да, но у вас могут быть другие проблемы. Это просто исправляет нарушение доступа. – NathanOliver

0

В заявлении

key[k] 

Как проверить, что индекс к < key.length()? Переменная k ограничена в [0,5], но откуда вы знаете, что `key.length() < 5 '?

+0

https://www.youtube.com/watch?v=fISErJCjz3Q –