麻烦用C else,if和scanf

时间:2015-12-23 14:26:07

标签: c

我是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知识而道歉。

5 个答案:

答案 0 :(得分:3)

usernametryusernamechar类型的数组。执行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个字符串而不是==

使用==是错误的,因为在这种情况下,您要比较usernametryusername的地址,当然它们总是不同的。

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))