纯文本; cout>键; 对于(int i=0;i,c++,debugging,visual-studio-2015,console-application,vigenere,C++,Debugging,Visual Studio 2015,Console Application,Vigenere" /> 纯文本; cout>键; 对于(int i=0;i,c++,debugging,visual-studio-2015,console-application,vigenere,C++,Debugging,Visual Studio 2015,Console Application,Vigenere" />

C++; < >我在C++中创建了一个维吉涅密码,当我运行代码时,它有一个错误:“ >(按重试调试应用程序) ConsoleApplication2.exe已触发断点。 调试断言失败! 程序:C:\Windows\system32\MSVCP140D.dll 文件:c:\ProgramFiles(x86)\microsoft visual studio 14.0\vc\include\xstring 电话号码:1681 表达式:字符串下标超出范围 获取有关程序如何导致断言的信息 失败,请参阅断言上的VisualC++文档。 (按“重试”调试应用程序) 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; } #包括 #包括 #包括“stdafx.h” 使用名称空间std; int main() { 字符串明文、键、结果; int k=0; cout>纯文本; cout>键; 对于(int i=0;i

C++; < >我在C++中创建了一个维吉涅密码,当我运行代码时,它有一个错误:“ >(按重试调试应用程序) ConsoleApplication2.exe已触发断点。 调试断言失败! 程序:C:\Windows\system32\MSVCP140D.dll 文件:c:\ProgramFiles(x86)\microsoft visual studio 14.0\vc\include\xstring 电话号码:1681 表达式:字符串下标超出范围 获取有关程序如何导致断言的信息 失败,请参阅断言上的VisualC++文档。 (按“重试”调试应用程序) 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; } #包括 #包括 #包括“stdafx.h” 使用名称空间std; int main() { 字符串明文、键、结果; int k=0; cout>纯文本; cout>键; 对于(int i=0;i,c++,debugging,visual-studio-2015,console-application,vigenere,C++,Debugging,Visual Studio 2015,Console Application,Vigenere,您从未为Result设置大小,因此在 Result[i] = (((plaintext[i] - 97) + (key[k] - 97)) % 26) + 97; 无效。您需要首先设置结果的大小。可以使用 string plaintext, key, Result; int k = 0; cout << "Enter the plain text: "; cin >> plaintext; cout << "Enter the key word: "; ci

您从未为
Result
设置大小,因此在

Result[i] = (((plaintext[i] - 97) + (key[k] - 97)) % 26) + 97;
无效。您需要首先设置
结果的大小。可以使用

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());
//...
字符串明文、键、结果;
int k=0;
cout>纯文本;
cout>键;
Result.resize(明文.size());
//...
在语句中

key[k]

如何检查索引k
key.length()?变量
k
在[0,5]中有界,但如何知道'key.length()<5'?

我是否必须复制此结果。调整大小(明文.size());还是有更多@NathanOliver@warren据我所见,是的,但您可能有其他问题。这只是修复了访问冲突。