2013-08-23 163 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