strcmp在C中返回意外值

时间:2014-01-29 22:04:45

标签: c

我是C的新手,我的代码行看起来像这样:

char user[16];
fgets(user,16,stdin);

我在键盘上输入了“zeyang”,我还有另一个代码:

char pwname[1000];
pwname="zeyang";

然后我使用strcmp来比较用户和pwname:

strcmp(user, pwname);

返回值为负数,我希望它为0,因为它们都是“zeyang”。为什么不是0?

3 个答案:

答案 0 :(得分:7)

如果有空间,

fgets包含输入的换行符。您将"zeyang\n""zeyang"进行了比较。来自fgets(3) man page

  

保留换行符(如果有)。

答案 1 :(得分:2)

来自stdin的第一个字符串包含一个额外的换行符。

答案 2 :(得分:0)

问题是您输入的句子将以换行符终止。 (我猜你在插入完字符后按了ENTER键。:D

在这种情况下,我会使用strncmp

strncmp(user,pwname,strlen(pwname)); 

此代码不会比较新行字符。