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