在我的程序中,我试图让第一次运行加密密码,第二次运行相同的函数,确保两个密码相同(通过比较加密值)。
然而,当我这样做时,似乎 copyEncryp[8]
是不保留价值的 encryp[8]
. 当运行程序时,我的编译器显示出了 cout
的声明 if
语句,两个C-字符串都匹配。
我是不是没有正确使用静态变量?按照我的理解,它们不像普通变量那样受范围限制,应该可以在第二次调用函数时保持相同的值。当我试图诊断这个问题时,我认为事实上静态C-String的声明连续被调用了两次(调用了 password_encryp
两次)是一个问题,所以我把声明移到了void function()中,但后来我得到了错误,说明静态C-字符串没有在该范围内定义(错误是在加密发生的第一行。有谁知道我在这里可能做错了什么,我想做的事情是否可能?
我需要调用加密函数两次,第一次加密第一个密码,第二次将加密密码的条目,加密,然后将其与第一个密码加密的副本进行比较。
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;
}
}
你没有正确使用数组。这是一个非法的数组访问
copyEncryp[8] = encryp[8];
因为你的数组大小是8,所以有效的索引是从0到7。
这似乎是一个很常见的新手误区,如果你把数组的大小放在方括号里,那么就意味着 "整个数组",但这是错误的。