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。