![](/img/trans.png)
[英]C++ invalid conversion from ‘char*’ to ‘const unsigned char*’
[英]C++ invalid conversion from 'char' to 'const char'
我在进行二维数组比较时遇到麻烦。 我需要创建一个伪登录系统,该系统要求用户输入用户名和密码,然后将输入内容与用户名的预定义列表进行比较。
在该函数中,预定义的用户名由*s
表示,用户输入为*s1
。 当我尝试编译它时,此讨厌的麻烦制造者出现了:
68 D:\\ Personal \\ Dev-Cpp \\ projects \\ loginSysTest \\ main.cpp从
char' to
const的无效转换
有关if
语句中的strncmp
函数。
这是代码:
#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::vector
和std::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(),因此我将数组更改为指向字符串的指针数组。 该数组在末尾有一个空指针,以使循环知道何时到达末尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.