下面的字符串是否包含空终止符
'\0'
?
std::string temp = "hello whats up";
不,但是如果您说
temp.c_str()
,此方法的返回值中将包含一个空终止符。
还值得一提的是,您可以像任何其他字符一样在字符串中包含空字符。
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
打印
5 5
而不是您可能期望的
5 1
,如果空字符对字符串有特殊含义。
C++03 中没有,甚至在 C++11 之前也不能保证 C++ std::string 在内存中是连续的。只有 C 字符串(用于存储字符串的字符数组)具有 null 终止符。
在 C++11 及更高版本中,
mystring.c_str()
相当于 mystring.data()
相当于 &mystring[0]
,并且 mystring[mystring.size()]
保证为 '\0'
。
在 C++17 及更高版本中,
mystring.data()
还提供重载,返回指向字符串内容的非常量指针,而 mystring.c_str()
仅提供 const
限定的指针。
这取决于您对此处“包含”的定义。在
std::string temp = "hello whats up";
有几点需要注意:
temp.size()
将返回从第一个h
到最后一个p
(包括两者)的字符数temp.c_str()
或temp.data()
将带着null
终止符int(temp[temp.size()])
将是零我知道,我听起来与这里的一些答案类似,但我想指出,
size
中的std::string
的C++
是单独维护的,它不像C
中的那样你一直在计数,除非你找到了第一个
null
终结者。补充一下,如果您的
string literal
包含嵌入的
\0
,故事会有点不同。在这种情况下,
std::string
的构造在第一个
null
字符处停止,如下所示:
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
参考文献:
temp.c_str()
,那么它将返回以 null 结尾的 c 字符串。然而,存储在对象
temp
中的实际数据可能不是以空终止的,但这对程序员来说并不重要,也不应该重要,因为当程序员想要
const char*
时,他会调用
c_str()
在对象上,保证返回以 null 结尾的字符串。
使用
temp.c_str()
你会得到字符串的 C 表示形式,其中肯定会包含
\0
字符。除此之外,我真的不明白它在 C++ 字符串上有什么用处
std::string
在内部保存字符数。在内部它使用这个计数来工作。就像其他人所说的那样,当您需要显示字符串或出于任何原因时,您可以使用其
c_str()
方法,该方法将为您提供末尾带有空终止符的字符串。
[电子邮件受保护] 或通过 WhatsApp 发送他的电话号码 +2348163430143 他治疗阿尔茨海默病毒、癌症、艾滋病毒、疱疹、生殖器、疣、ALS、BV、UTI、处女感染、生殖器、疣、HPV、肝炎B,祝你好运,HSV,怀孕,前男友回来了。 现在就从他的网站订购:https://drsikiesherbalcuremedicine.weebly.com/ 您可以通过邮件联系我:[电子邮件受保护]