【问题标题】:Compare equality of char[] in C比较 C 中 char[] 的相等性
【发布时间】:2010-03-13 23:10:42
【问题描述】:

我有两个变量:

char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";

我想检查这两个是否相等...使用charTime == buf 不起作用。

我应该使用什么,有人可以解释为什么使用 == 不起作用吗?

这个动作在 C 和 C++ 中会有所不同吗?

【问题讨论】:

  • 顺便说一句:char[] 是一个不完整的类型。 charTime 实际上是 char[5] 类型,buf 实际上是 char[14] 类型。在这种情况下,编译器会为我们计算完成类型。

标签: c++ c equality


【解决方案1】:
char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE";

C++C(为 C 删除 std::):

bool equal = (std::strcmp(charTime, buf) == 0);

但真正的 C++ 方式:

std::string charTime = "TIME", buf = "SOMETHINGELSE";
bool equal = (charTime == buf);

使用== 不起作用,因为它试图比较每个数组的第一个字符的地址(显然,它们不相等)。它不会比较两个数组的内容。

【讨论】:

  • 这是因为 C++ 允许运算符重载,它重载 == 以实际进行内容比较,而不是“默认”char[]==,即参考比较。
  • 你不需要为 C 定义 #define 布尔类型吗?
  • @mim:C99 有一个bool 类型。所以你可能只需要用 MSVC 定义它。
  • @Mim,正如 Johannes Rössel 所说,C99 有一个 bool 类型。您需要包含<stdbool.h> 才能使用bool,或者您需要使用内置类型_Boolbool 将是#define)或只是简单的int .
【解决方案2】:

在c中你可以使用string.h中的strcmp函数,如果它们相等则返回0

#include <string.h>

if( !strcmp( charTime, buf ))

【讨论】:

    【解决方案3】:

    在使用== 的表达式中,char 数组的名称衰减为指向各自数组开头的char*。然后根据指针本身的值而不是数组的实际内容进行比较。

    == 只会对指向相同位置的两个指针返回 true,否则返回 false,即使它们指向具有相同内容的两个数组。

    你需要的是标准库函数strcmp。如果数组包含相同的内容,则此表达式的计算结果为真(直到终止空字符,它必须存在于两个数组中,从strcmp 到安全工作)。

    strcmp(charTime, buf) == 0
    

    【讨论】:

      【解决方案4】:

      在 for 循环中检查它们。获取每个字符的 ASCII 数字,一旦它们改变它们不相等。

      【讨论】:

      • 这是最简单的方法吗?一定是更好的东西?
      • 有参考 Johannes Schaub - litb 帖子。
      【解决方案5】:

      您正在检查身份 charTimebuf。要检查相等性,请遍历一个数组中的每个字符,并将它们与另一个数组中的相关字符进行比较。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-21
        • 2012-12-26
        • 1970-01-01
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多