C++ C++;读访问冲突

C++ C++;读访问冲突,c++,visual-studio-2017,C++,Visual Studio 2017,标题说明了一切。我很难弄清楚这个错误可能意味着什么,因为我以前从未听说过它 string Cracker_Functions::Loop(string Password, char fullset[]) { int x = 0; char word[32] = ""; int Passwordlen = Password.length(); for (int a = 0; a < Passwordlen; a++) { for (int b

标题说明了一切。我很难弄清楚这个错误可能意味着什么,因为我以前从未听说过它

string Cracker_Functions::Loop(string Password, char fullset[]) {
    int x = 0;
    char word[32] = "";
    int Passwordlen = Password.length();

    for (int a = 0; a < Passwordlen; a++) {
        for (int b = 0; b < 92; b++) {
            for (int c = 0; c < 92; c++) {
                word[b] = fullset[c];

                if (word == Password) {
                    return word;
                }
            }

            word[b] = fullset[a]; 
            continue;
        }

        word[a] = fullset[x];
        x += 1;
    }

    return "";
}
关于函数的注释:
包括所有必要的文件。
该函数在另一个文件中预定义。
数字32是计算机将尝试猜测的最大密码大小。
数字92是计算机可以循环使用的字符总数。
fullset是一个列表中的所有字符。
word表示程序当前正在循环的内容。例如,当前的字符组合是“h#(u?”

X是第一个循环与其他2个完成时的计数器,需要重新分配新的字母以重新开始。

您使用C++,所以请,请使用<代码> STD::String < /C> >尽可能。<代码> char(32)只能容纳31个字符,因此如果缓冲区溢出,您将自己设置为失败。您还应该养成声明参数的习惯,例如
const string&
,因为这样比按值传入更便宜、更安全。@tadman Minor Nittpick,它将容纳32个字符,但最后一个应该是空终端tor.所以实际上密码长度最多应该是31。也就是说,我同意“use
std::string
”部分。这个函数可以归结为
return“如果你在C++中遇到问题,这是可以理解的,因为它是一种非常难掌握的语言,你可能想先把它用Ruby或Python来做原型,在这里你不必担心C++所处理的很多技术细节。是的,如果你使用固定长度的字符串,你可以容纳32个字符,但这里不是这样,我不能告诉你这段代码中发生了什么,因为它看起来像是一堆不同代码位的拼凑。意图还很不清楚,所以这是一个注释不是可选的情况。这段代码应该做什么is:char-word[32]=“”;与您认为的不同。您的密码是否超过32个字符?如果是,则“word[a]”将在数组结束后访问内存。
word[a] = fullset[x];