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

下面的string是否包含空终止符'\ 0'?

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

谢谢! 🙂

不,但如果你说temp.c_str()一个null终止符将被包括在这个方法的返回。

同样值得一提的是,你可以像任何其他字符一样在一个string中包含一个空字符。

 string s("hello"); cout << s.size() << ' '; s[1] = '\0'; cout << s.size() << '\n'; 

版画

5 5

而不是像你所期望的那样,如果空字符对string有特殊的含义。

不在C ++ 03中,甚至在C ++ 11之前,C ++ std :: string在内存中是连续的。 只有Cstring(用于存储string的字符数组)具有空终止符。

在C ++ 11及更高版本中, mystring.c_str()相当于mystring.data()相当于&mystring[0]mystring[mystring.size()]保证为'\0'

是的,如果你调用temp.c_str() ,那么它将返回以空字符结尾的c-string。

但是,存储在对象temp的实际数据可能不是空终止的,但对程序员无关紧要,因为当程序员想要const char* ,他会在对象上调用c_str() ,保证返回以null结尾的string。

使用C ++string,您不必担心这个问题,这可能取决于实现。

使用temp.c_str()会得到string的C表示,它肯定包含\0字符。 除此之外,我真的不知道它是如何有用的C + +string

std::string内部保留了一些字符数。 它在内部使用这个计数。 就像其他人所说的,当你需要显示的string或任何原因时,你可以使用它的c_str()方法,它会在末尾给你带有空终止符的string。