下面的字符串是否包含空终止符'\ 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()方法,该方法将在字符串末尾提供空终止符。