Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个值(几乎)相同的字符串在进行相等比较时返回0或1(它们之间的差异为';\0';字符)_C++_String_Operator Overloading - Fatal编程技术网

C++ 两个值(几乎)相同的字符串在进行相等比较时返回0或1(它们之间的差异为';\0';字符)

C++ 两个值(几乎)相同的字符串在进行相等比较时返回0或1(它们之间的差异为';\0';字符),c++,string,operator-overloading,C++,String,Operator Overloading,在以下代码中: string x="test"; string y="test"; y += '\0'; cout << (x==y) << endl; string x=“测试”; 字符串y=“测试”; y+='\0'; cout'\0'是一个序数值为0的单个字符operator+=(char)将任何char添加到字符串中,而不考虑其值。比较追加前后的y.size(),您将看到大小增加了1 “\0”是一个字符串文字,一个常量字符[2]包含两个空字符,一个由您显式,一个

在以下代码中:

string x="test";
string y="test";
y += '\0';
cout << (x==y) << endl;
string x=“测试”;
字符串y=“测试”;
y+='\0';

cout
'\0'
是一个序数值为0的单个
字符
operator+=(char)
将任何
char
添加到字符串中,而不考虑其值。比较追加前后的
y.size()
,您将看到大小增加了1

“\0”
是一个字符串文字,一个
常量字符[2]
包含两个空字符,一个由您显式,一个由编译器隐式。当
运算符+=(const char*)
将其视为以C样式null结尾的字符串时,其逻辑长度在第一个null字符处停止,因此其长度实际上为0。比较追加前后的
y.size()
,您会发现大小没有变化


operator==
size()
考虑在内。两个大小不同的字符串将返回false。两个大小相同的字符串将比较其所有
char
s,包括嵌入的空字符

只需阅读源代码和/或规范(例如cppreference.com)。顺便说一句:这也解释了“非空终止”。但是,请仔细阅读,因为“not null terminated”表示null是一个常规的非终止元素值。
“\0”
是一个长度为零的C样式字符串,并被转换为空的
std::string
“\0”
--
+
看到这是一个C字符串文本,因此将搜索第一个空字节以终止。猜猜第一个空字节在哪里?您还可以将
“he\0ho”的
(文本字符串后缀)与
std::string(“he\0ho”)
进行比较。后者
std:string
不包含
o
string x="test";
string y="test";
y += "\0";
cout << (x==y) << endl;