下面的字符串是否包含空终止符'\ 0'?
std::string temp = "hello whats up";
谢谢!:)
Answers:
不,但是如果您说temp.c_str()
此方法的返回值中将包含空终止符。
同样值得一提的是,您可以像其他任何字符一样在字符串中包含空字符。
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
版画
5 5
而不是5 1
您所期望的,如果空字符对字符串具有特殊含义。
temp.c_str()
,则将包含空字符。如果您确实需要在字符串中添加它,则可以像添加其他任何字符一样添加它。temp.push_back('\0')
。现在temp.c_str()
将包括两个空字符。
在C ++ 03中不是,并且甚至在C ++ 11之前甚至不能保证C ++ std :: string在内存中是连续的。只有C字符串(用于存储字符串的char数组)具有空终止符。
在C ++ 11和更高版本中,mystring.c_str()
equalmystring.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
内容包含Embedded ,则故事会有所不同\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字符串。
但是,存储在对象中的实际数据temp
可能不会以null终止,但对于程序员而言这并不重要,也不重要,因为当程序员想要时const char*
,他会调用c_str()
该对象,保证返回null -终止的字符串。
temp.size()
。
std::string
内部保留字符数的计数。在内部使用此计数起作用。就像其他人所说的那样,当您需要显示字符串或出于任何原因时,可以使用其c_str()
方法,该方法将在字符串末尾提供空终止符。