下面的字符串是否包含空终止符'\ 0'?
std::string temp = "hello whats up";
谢谢! :)
不,但如果你说temp.c_str()
,这个方法的回报中将包含一个null终止符。
值得一提的是,您可以在字符串中包含空字符,就像任何其他字符一样。
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字符串(用于存储字符串的字符数组)具有空终止符。
在C ++ 11及更高版本中,mystring.c_str()
相当于mystring.data()
相当于&mystring[0]
,mystring[mystring.size()]
保证是'\0'
。
这取决于您在此处对“包含”的定义。在
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-string。
但是,存储在对象temp
中的实际数据可能不会以空值终止,但它并不重要,对程序员来说无关紧要,因为当程序员想要const char*
时,他会在对象上调用c_str()
,这是有保证的返回以null结尾的字符串。
使用C ++字符串,您不必担心这一点,并且可能取决于实现。
使用temp.c_str()
你得到一个字符串的C表示,它肯定会包含\0
字符。除此之外,我真的不知道它对C ++字符串有什么用处
std::string
内部保留了字符数。在内部,它使用此计数。就像其他人所说的那样,当你需要显示字符串或任何原因时,你可以使用它的c_str()
方法,它会在最后给你带有null终结符的字符串。