C++ 中的 Vigenere 密码错误

Posted

技术标签:

【中文标题】C++ 中的 Vigenere 密码错误【英文标题】:Vigenere Cipher error in C++ 【发布时间】:2016-02-24 02:53:06 【问题描述】:

我在 c++ 中创建了一个 vigenere 密码,当我运行代码时出现错误提示:(按重试以调试应用程序) 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&lt;plaintext.length(); i++)它说了一些关于

【问题讨论】:

【参考方案1】:

您从未为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());
//...

【讨论】:

我必须复制这个 Result.resize(plaintext.size());还是还有更多? @NathanOliver @warren 从我看到的情况来看是的,但您可能还有其他问题。这只是修复了访问冲突。【参考方案2】:

在声明中

key[k]

如何检查索引 k key.length() ?变量k 有界 [0,5] 但你怎么知道 `key.length()

【讨论】:

以上是关于C++ 中的 Vigenere 密码错误的主要内容,如果未能解决你的问题,请参考以下文章

Vigenere 密码语法错误

python中的Vigenere密码[关闭]

尝试加密/解密时出现 vigenere 密码错误

使用 vigenere 密码加密时出现奇怪的错误

CS50 PSet 2:Vigenere 密码分段错误

vigenere密码中的itertools循环导致空间问题python