比较C中char []的相等性

时间:2010-03-13 23:10:42

标签: c++ c equality

我有两个变量:

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

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

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

这个行为在C和C ++中会有所不同吗?

5 个答案:

答案 0 :(得分:20)

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

C ++ C (删除std::代表C):

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

但真正的C ++方式:

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

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

答案 1 :(得分:2)

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

#include <string.h>

if( !strcmp( charTime, buf ))

答案 2 :(得分:1)

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

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

您需要的是标准库函数strcmp。如果数组包含相同的内容(最终为strcmp的两个数组中必须存在的终止空字符才能安全地工作),此表达式的计算结果为true。

strcmp(charTime, buf) == 0

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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