以下字符串是否包含空终止符'\ 0'?
std::string temp = "hello whats up";
谢谢! :)
答案 0 :(得分:71)
不,但是如果你说temp.c_str()
,这个方法的回报中将包含一个空终止符。
值得一提的是,您可以在字符串中包含空字符,就像任何其他字符一样。
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
打印
5 5
而不是5 1
。
答案 1 :(得分:43)
不是在C ++ 03中,在C ++ 11之前甚至不能保证C ++ std :: string在内存中是连续的。只有C字符串(用于存储字符串的char数组)具有空终止符。
在C ++ 11及更高版本中,mystring.c_str()
相当于mystring.data()
相当于&mystring[0]
,mystring[mystring.size()]
保证为'\0'
。< / p>
答案 2 :(得分:4)
这取决于您对&#39;包含&#39;的定义。这里。在
std::string temp = "hello whats up";
有几点需要注意:
temp.size()
会返回从h
到最后p
temp.c_str()
或temp.data()
将返回null
终结者int(temp[temp.size()])
将零 我知道,我听起来与此处的一些答案类似,但我想指出size
中std::string
的{{1}} 单独维护并且不一样在C++
中,除非您找到第一个C
终结符,否则您将继续计数。
要添加,如果您的null
包含嵌入式string literal
,则故事会略有不同。在这种情况下,\0
的构造在第一个std::string
字符处停止,如下所示:
null
参考文献:
答案 3 :(得分:2)
是的,如果你打电话给temp.c_str()
,那么它将返回以空值终止的c-string。
但是,存储在对象temp
中的实际数据可能不会以空值终止,但它并不重要,对程序员来说无关紧要,因为当程序员想要const char*
时,他会在对象上调用c_str()
,保证返回以null结尾的字符串。
答案 4 :(得分:1)
使用C ++字符串,您不必担心这一点,而且可能取决于实现。
使用temp.c_str()
得到字符串的C表示,它肯定包含\0
字符。除此之外,我真的不知道它对C ++字符串有用吗
答案 5 :(得分:1)
std::string
在内部保留字符数。在内部,它使用此计数。就像其他人说过的那样,当你需要显示字符串或任何原因时,你可以使用c_str()
方法,它会在最后为你提供带有空终止符的字符串。