【问题标题】:return value of function == 0?函数的返回值 == 0?
【发布时间】:2011-12-23 15:20:32
【问题描述】:

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

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

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

【问题讨论】:

  • 有什么问题?如果 strcmp 返回 0,则表示字符串相等。否则,一个大于另一个,取决于结果的符号(负或正结果)。
  • 您返回评估结果“strcmp(array1,array2)==0”。如果 strcmp(array1, array2) 确实等于 0,那么您将返回 true,否则返回 false。它并不比“return 1==1;”更具异国情调,除了这个例子显然总是返回 true。

标签: c function strcmp


【解决方案1】:

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

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

有关strcmp()的更多信息,请查看其man page

【讨论】:

    【解决方案2】:

    strcmp() 返回 0 如果它的两个参数比较相等。在您的示例中,functionX() 返回 "true" iff array1array2 比较相等。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            return strcmp(array1,array2)==0;
            

            相同
            return !strcmp(array1,array2) ;
            

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-04-28
              • 2013-09-02
              • 2016-06-05
              • 2015-12-03
              • 2012-03-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多