1

好的,所以我有以下功能:

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

为什么会有人这样做?==0 表示此函数将始终返回 FALSE。这是真的还是我错过了一些奇特的 C 语法引物?

4

6 回答 6

1

(strcmp(array1, array2) == 0)是一个计算 的表达式strcmp(),它可以返回一个负数、正数或零数。当两个字符串相同时,strcmp()返回0

== 0strcmp()正在比较with的返回值0。当两个字符串相同时,您可以在需要functionX()返回“真”(非零)值的情况下使用它。具体来说,strcmp(array1,array2)==01在这种情况下返回,0否则。

有关更多信息strcmp(),请查看其手册页

于 2011-12-23T15:23:30.137 回答
1

strcmp()如果它的两个参数比较相等,则返回 0。在您的示例中,functionX()返回“true” iffarray1array2比较相等。

于 2011-12-23T15:23:37.033 回答
1

strcmp()返回一个整数,如果两个字符串相等则为 0,否则为非零。

此函数只是“反转”结果,如果结果为 0,它将返回 1,如果结果不为零,则返回 0。在 C 中,任何非 0 都被认为是“真”,因为没有真正的布尔类型(C99 除外)。

于 2011-12-23T15:23:43.327 回答
1

这里没有什么奇特的......你正在返回表达式的结果strcmp(array1, array2)==0,它将结果strcmp与 0 进行比较,如果它们比较相等则返回 1,如果它们不同则返回 0。

总而言之,functionX如果 的结果strcmp为 0(即如果两个比较的字符串相等)则返回 1,否则返回 0。

于 2011-12-23T15:23:45.800 回答
0

与零比较与否定布尔表达式相同,因为在 C 中使用整数作为布尔值。所以

return strcmp(array1,array2)==0;

是一样的

return !strcmp(array1,array2) ;

由于 strcmp 仅在两个字符串相等时才返回零,因此如果字符串相等,则表达式将返回 true。

于 2011-12-23T15:37:04.870 回答
0

此构造将 的结果strcmp与 0 进行比较并返回比较的结果

于 2011-12-23T15:22:43.327 回答