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。也就是说,我同意“usestd::string
”部分。这个函数可以归结为return“如果你在C++中遇到问题,这是可以理解的,因为它是一种非常难掌握的语言,你可能想先把它用Ruby或Python来做原型,在这里你不必担心C++所处理的很多技术细节。是的,如果你使用固定长度的字符串,你可以容纳32个字符,但这里不是这样,我不能告诉你这段代码中发生了什么,因为它看起来像是一堆不同代码位的拼凑。意图还很不清楚,所以这是一个注释不是可选的情况。这段代码应该做什么is:char-word[32]=“”;与您认为的不同。您的密码是否超过32个字符?如果是,则“word[a]”将在数组结束后访问内存。
word[a] = fullset[x];