C++从'char'到'const char'的无效转换

C++ invalid conversion from 'char' to 'const char'

本文关键字:char 无效 转换 const C++      更新时间:2023-10-16

我在进行二维数组比较时遇到问题。我需要创建一个伪登录系统,要求用户输入用户名和密码,然后将输入与预定义的用户名列表进行比较。

在函数中,预定义的用户名由*s表示,用户输入为*s1。当我试图编译它时,这个讨厌的麻烦制造者出现了:

68 D:\个人\开发人员Cpp\projects\loginSysTest\main.Cpp从char' to常量转换无效

关于CCD_ 5语句中的CCD_。

这是代码:

#define nameLenght 30
#define User 10
char usernames[User][User] = {{"student"}, {"admin"}, {"Deus Ex Machina"}};
//=====================================================================
int main(int argc, char *argv[])
{
    char usernameInput[nameLenght + 1] = {0};
    gets(usernameInput);
    int login = compS(*usernames, usernameInput);
    if(login == 0)
        printf("Access Granted! n");
    else 
        printf("Access Denied!");
    system("PAUSE");    
    return 0;
}
//=====================================================================        
int compS(char *s, char *s1)
{ 
    for(int k = 0 ;k < nameLenght; k++)
    {
        if(strncmp(s[k], s1, strlen(s1)) == 0)
        return 1;  
    }
}

提前谢谢。

只需沿着以下行使用std::vectorstd::string

std::vector<std::string> usernames({"student", "admin", "Deus Ex Machina"});
std::string input;
std::cin >> input;
if (std::find(begin(usernames), end(usernames), input) != end(usernames))
    std::cout << "Access Granted!n";
else std::cout << "Access Denied!n";

现场演示

如果你想(或需要)让你的C风格代码既不漂亮也不安全,你可以写

strncmp(s + (k+nameLenght), s1, strlen(s1))

这将进行编译,也许还需要付出更多的努力,但您必须更正usernames的大小,并实际调用compS

请参阅另一个答案以获得更安全的C++风格的代码。

有几种方法可以实现这一点。这是我想到的第一种方式。

char* usernames[] = { "student" , "admin", "Deus Ex Machina", NULL };
int compS(char **s, char *s1)
{
    for (int k = 0; s[k] != NULL; k++)
    {
        if (strncmp(s[k], s1, strlen(s1)) == 0)
            return 0;
    }
    return 1;
}

您必须将一个指向字符串的指针传递给strncmp(),所以我将您的数组更改为指向字符串的一个指针数组。数组的末尾有一个空指针,以便循环知道何时到达末尾。