我是C的新手,我正在制作我的第一个"体面的"程序。我的代码遇到了麻烦。
char username[] = "root";
char usernametry[10];
scanf("%s",usernametry);
if (usernametry == username)
{
printf("Welcome ROOT user\n");
}
else
{
printf("Try again\n");
}
每当我执行我的程序时,一切正常;但是,当我尝试登录并输入root
作为用户名时,它会返回Try again
。有人可以建议为什么会这样吗?我是C的新手,所以我为缺乏C知识而道歉。
答案 0 :(得分:3)
usernametry
和username
是char
类型的数组。执行usernametry == username
时,您不是在比较两个字符串是否相等,而是将char
中第一个usernametry
的内存地址与第一个char
的内存地址进行比较在username
中。为了比较两个字符串是否相等,您应该使用strcmp
。另外,请考虑将%s
中的scanf
替换为%9s
,以便usernametry
永远不会超过9 char
s(这可能是缓冲区溢出,因为第10个char
需要是'\0'
,空字符,用于终止C风格的字符串。)
答案 1 :(得分:1)
您无法使用==比较字符串,这不是那种高级语言。请参阅strcmp()以比较字符串。
顺便说一句,如果有人输入超过10个字符的名字怎么办?您正在向代码中的缓冲区溢出错误漂移; - )
答案 2 :(得分:1)
使用strcmp()
函数比较2个字符串而不是==
使用==
是错误的,因为在这种情况下,您要比较usernametry
和username
的地址,当然它们总是不同的。
if(strcmp(usernametry, username) == 0) // return 0 if equal !=0 if not equal
答案 3 :(得分:0)
使用 strcmp 比较两个字符串:
if(!strcmp(usernametry,username))
答案 4 :(得分:0)
你的变量指针不同。
替换为:
if (!strcmp(usernametry, username))