std :: string是否包含null终止符?

时间:2012-08-01 04:50:24

标签: c++ string null

以下字符串是否包含空终止符'\ 0'?

std::string temp = "hello whats up";

谢谢! :)

6 个答案:

答案 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()])

我知道,我听起来与此处的一些答案类似,但我想指出sizestd::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()方法,它会在最后为你提供带有空终止符的字符串。