2011-12-23 171 views
1

好了,我有以下功能:函數== 0的返回值?

int functionX() 
{ 
    return strcmp(array1,array2)==0; 
} 

爲什麼會有人這樣做? == 0會暗示此函數將始終返回FALSE。這是真的還是我錯過了一些奇特的C語法引擎?

+0

問題是什麼? 如果strcmp返回0,則表示字符串相等。 否則,根據結果的符號(負值或正值結果),另一個值大於另一值。 – Rolice 2011-12-23 15:23:51

+0

您返回評估結果「strcmp(array1,array2)== 0」。如果strcmp(array1,array2)確實等於0,那麼您將返回true,否則返回false。它不比「return 1 == 1」更具異國情調,除了該例子顯然總是返回true。 – 2011-12-23 15:26:05

回答

0

該構建體進行比較的strcmp與0的結果,並返回的比較

1

(strcmp(array1, array2) == 0)結果是評估strcmp(),其可以返回一個負,正,或零數的表達式。當兩個字符串相同時,strcmp()返回0

== 0正在比較strcmp()0的返回值。在兩個字符串相同的情況下,如果需要functionX()以返回「true」(非零)值,則可以使用此值。具體而言,strcmp(array1,array2)==0將在這種情況下返回1,否則返回0

有關strcmp()的更多信息,請查看其man page

1

strcmp()如果兩個參數比較相等,則返回0。在你的例子中,functionX()返回「true」iff array1array2比較相等。

1

strcmp()返回一個整數,如果兩個字符串是等價的,則爲0,否則爲非零。

該函數只是「反轉」結果,意思是說,如果結果爲0,則返回1,如果結果爲非零,則返回0。在C中,任何不是0的東西都被認爲是「真的」,因爲沒有真正的布爾類型(除了C99)。

+0

@OliCharlesworth固定 – fge 2011-12-23 15:35:38

1

這裏沒有任何異國情調......您將返回表達式strcmp(array1, array2)==0的結果,它將strcmp的結果與0進行比較,如果它們相等則返回1,如果它們不同則返回0。

總而言之,如果strcmp的結果爲0(即,如果兩個比較的字符串相等),則functionX將返回1,否則爲0。

0

與零相比,與否定布爾表達式相同,因爲在C中使用整數作爲布爾值。所以

return strcmp(array1,array2)==0; 

return !strcmp(array1,array2) ; 

一樣的STRCMP只返回零,如果兩個字符串相等,那麼如果字符串相等,則表達式將返回true。