2011-12-23 172 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。