2013-08-23 118 views
1

所以我有这个(不完整的代码)STRCMP不比较字符串正确

char list[1000][10];

strcpy(list[0],"ab");

printf("%d\n",strcmp(list[0],"ab"));

和STRCMP将返回0。有人可以解释为什么它是这样做的?

在此先感谢。

+0

'list [0]'是什么? –

+4

因为两个比较字符串是相等的,所以'strcmp'返回'0'。 –

+0

http://linux.die.net/man/3/strcmp,http://pubs.opengroup.org/onlinepubs/9699919799/functions/strcmp.html,或者如果你的系统有'man'则只是'man strcmp' '命令。 –

回答

7

如果list[0]在这种情况下包含“ab”,则strcmp方法将返回0。

它返回:

返回表示字符串之间的关系的积分值:

零值表示这两个字符串相等。

大于零的值表示不匹配的第一个字符在str1中比在str2中有更大的值;而小于零的值表示相反。

+0

哦,我认为功能通常在它们为真时返回1。我的一个愚蠢的错误对不起, –

+1

@HananSaad:它取决于函数,'strcmp'不返回真或假的值,直到你阅读了该函数的文档后才能使用任何函数 –

+0

@ HasanSaad“我以为” - 不要这样做**不要做出假设*从不*** ***阅读文档 – 2013-08-23 21:51:41

0

strcmp()做琴弦,而不是平等测试的序号比较。返回值0意味着字符串相等!

如果你想测试平等使用这种模式:

if (strcmp(s, "ab") == 0) { 
    // strings are equal 
} 
0

因为strcpy()是一个函数,复制“正确”的字符串,“左”的字符串。 因此,在strcpy(list[0],"ab");之后,list[0]的内容是“ab”。 然后,它们是相等的字符串,并且strcmp返回0,这意味着“相等”。

0

你的字符串匹配,这就是为什么它返回0 做这样的...

char list[1000][10]; 

    strcpy(list[0],"ab"); 
    if(strcmp(list[0],"ab")==0) 
     printf("Matched\n",); 
0

正如丹尼尔提到的,returnd值为0

cplusplus.com

采取

返回一个整数值,指示 字符串之间的关系:零值表示在 字符串形成相同的字符串。大于零的值表示 第一个不匹配的字符在str1中的 中比在str2中的值大;而小于零的值表示相反。

您还应该使用strncmp而不是strcmp

+0

'strncmp'并不总是比'strcmp'好。只要你知道两个参数都是有效的字符串,并且你想比较整个字符串而不仅仅是一个初始的子字符串,那么'strcmp'就可以了。 –

+0

请不要cplusplus.com。首先,问题被标记为C.其次,cplusplus.com是一个完全不准确的可怕网站。 [this](http://pubs.opengroup.org/onlinepubs/9699919799/functions/strcmp.html)更好。 – 2013-08-23 21:50:54

+0

这可能是,cplusplus.com是一个可怕的网站,主要是关于C++。但在这种情况下,答案似乎没有问题,并且提及的也是关于C.而基思的好处是,他是对的。 – pzaenger