C++ 比较C中char[]的相等性

C++ 比较C中char[]的相等性,c++,c,equality,C++,C,Equality,我有两个变量: char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE"; 我想检查一下这两者是否相等。。。使用charTime==buf不起作用 我应该使用什么,有人能解释为什么使用==不起作用吗 这个动作在C和C++中是否不同?< P>在A for循环中检查它们。获取每个字符的ASCII数字,一旦它们改变,它们就不相等 char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE"; C++

我有两个变量:

char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";
我想检查一下这两者是否相等。。。使用
charTime==buf
不起作用

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


<>这个动作在C和C++中是否不同?

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

char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE";
C++C(删除C的
std::
):

但真正的C++方式:

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

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

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

#include <string.h>

if( !strcmp( charTime, buf ))
#包括
如果(!strcmp(charTime,buf))

您正在检查标识
charTime
buf
。要检查是否相等,请在一个数组中的每个字符上循环,并将它们与另一个数组中的相关字符进行比较。

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

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

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


这是最简单的方法吗?这是因为C++允许操作符重载,它重载<代码> ==/COD>来进行内容比较,而不是“默认”<代码> char [] /代码> <代码>=< /代码>,这就是引用比较。你不需要为C定义你的bool类型吗?@mim:C99有一个
bool
类型。所以您可能只需要用MSVC来定义它。@Mim,正如Johannes Rössel所说,C99有一个
bool
类型。您需要包含
才能使用
bool
,或者您需要使用内置类型
\u bool
(其中
bool
将是
\define
的)或者只是普通的
int
。顺便说一句:
char[]
是一个不完整的类型
charTime
实际上是
char[5]
类型,
buf
实际上是
char[14]
类型。在本例中,编译器对我们完成类型很重要。
#include <string.h>

if( !strcmp( charTime, buf ))
strcmp(charTime, buf) == 0