[英]Static C-String is not keeping its value in a function (C++)
在我的程序中,我试图让第一次运行加密密码,第二次运行相同的 function 确保两个密码相同(通过比较加密值)。
但是,当我这样做时,似乎copyEncryp[8]
没有保留encryp[8]
的值。 运行程序时,我的编译器显示两个 C 字符串都匹配的if
语句的cout
语句。
我没有正确使用 static 变量吗? 据我了解,它们不限于像普通变量一样的 scope 并且应该能够在第二次调用 function 时保持相同的值。 在尝试诊断这个问题时,我认为 static C-Strings 的声明被连续调用两次(调用password_encryp
两次)是一个问题,所以我将声明移到了 void function() 中,但后来我得到了错误指出 static C-Strings 未在 scope 中定义(错误出现在将发生加密的第一行。有人看到我在这里可能做错了什么/我正在尝试做的事情甚至可能吗?
我需要调用加密 function 两次,第一次加密第一个密码,第二次将加密输入密码,加密,然后将其与第一个密码加密的副本进行比较。
void password_encryption(char password[8], int counter);
void function()
{
static int counter = 0;
static char password[8];
cout << "Enter your password: ";
cin >> password;
password_encryption(password, counter); //passing password and counter value
cout << "Enter the same password for confirmation: ";
cin >> password;
counter = 1; //counter for the number of times that the function has been called
password_encryption(password, counter);//invoked a second time passing user entered password and counter
}
void password_encryption(char password[8], int counter)
{
const int key = 15;
static char encryp[8];
static char copyEncryp[8];
//loop encrypts password
for (int i = 0; (i < 8 && password[i] != '\0'); i++) //loop for password encryption
{
if (password[i]+key> 126)
encryp[i] = 32+((password[i]+key)-127);
else if (i < 32)
encryp[i] = password[i] + key;
}
if (counter == 0) //only runs first time
copyEncryp[8] = encryp[8]; //making the first encrypted password copyEncryp
if (counter == 1) //only will execute second time
{
if(copyEncry[8] == encryp[8])
cout << "Both passwords match" << endl;
else
cout << "Both passwords do not match" << endl;
}
}
您没有正确使用 arrays 。 这是非法的数组访问
copyEncryp[8] = encryp[8];
因为您的数组大小为 8,所以有效索引是从 0 到 7。
这似乎是一个很常见的新手误解,如果将数组的大小放在方括号中,则表示“整个数组”,但这是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.