繁体   English   中英

Static C-String 未在 function (C++) 中保留其值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM