2010-03-13 53 views
8

我有两个变量。比较的char []的平等使用C

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

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

+0

btw:'char []'是一个不完整的类型。 'charTime'实际上是'char [5]'的类型,'buf'实际上是'char [14]'的类型。在这种情况下,编译器为我们计算完成类型。 – sellibitze 2010-03-14 06:27:18

回答

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

C++Ç(对于C删除std::):

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

但真正的C++方式:

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

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

+0

这是因为C++允许运算符重载,它重载'=='实际执行内容比较,而不是“默认”char []'''==',这是参考比较。 – Pindatjuh 2010-03-13 23:20:11

+0

你不需要为C定义你的布尔类型吗? – zellio 2010-03-13 23:20:47

+0

@mim:C99有一个'bool'类型。所以你可能只需要用MSVC来定义它。 – Joey 2010-03-13 23:22:02

0

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

+0

这是最简单的方法吗?必须是更好的东西? – rksprst 2010-03-13 23:12:49

+0

有提到Johannes Schaub - litb的帖子。 – 2010-03-13 23:27:13

3

在C你可以使用的strcmp函数从string.h中,它如果他们是平等的

#include <string.h> 

if(!strcmp(charTime, buf)) 
0

要检查身份charTimebuf返回0。要检查相等性,请循环一个数组中的每个字符,并将它们与另一个数组中的相关字符进行比较。

+0

或使用strcmp ... – lajuette 2010-03-13 23:14:28

1

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

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

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

strcmp(charTime, buf) == 0