确实的std :: string包含空终结?(Does std::string contain nu

2019-06-17 13:59发布

将下面的字符串包含空终止符“\ 0”?

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

谢谢! :)

Answer 1:

没有,但是如果你说temp.c_str()空终止将被包括在此方法的返回。

另外值得一说的是,你可以包括一个字符串,就像任何其他字符空字符。

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

版画

5 5

而不是5 1 ,好像空字符有字符串有特殊的意义你可能期望。



Answer 2:

不是在C ++ 03,和它甚至没有以前C ++ 11,在一个C ++的std :: string是在内存中连续的保证。 只有C字符串(其旨在用于存储字符串字符数组)具有空终止。

在C ++ 11以后, mystring.c_str()等效于mystring.data()等效于&mystring[0]mystring[mystring.size()]是保证是'\0'



Answer 3:

这取决于你的“包含”在这里的定义。 在

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

有几点需要注意:

  • temp.size()将从第一返回的字符数h到最后p
  • 但在同一时间temp.c_str()temp.data()将与返回null终止
  • 或者换句话说int(temp[temp.size()])将是

我知道,我的声音有些类似于此的答案,但我想指出的是, sizestd::stringC++单独维护,它不喜欢 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

参考文献:

  • https://akrzemi1.wordpress.com/2014/03/20/strings-length/
  • http://en.cppreference.com/w/cpp/string/basic_string/basic_string


Answer 4:

是的,如果你调用temp.c_str()那么它将返回null结尾的C字符串。

然而,存储在对象的实际数据temp可能不是空终止,但它并不重要,要不要紧的程序员,因为当那么程序员要const char* ,他会打电话c_str()的对象,这是保证返回空值终止字符串。



Answer 5:

随着C ++字符串,你不必担心,这是可能取决于执行。

使用temp.c_str()你得到的字符串,它肯定会包含的一个C表示\0字符。 除此之外,我实在不明白怎么会是有用的在C ++字符串



Answer 6:

std::string内部保存的字符数的计数。 在内部它的工作原理采用这种计数。 像其他人说,当你需要显示或任何原因的字符串,可以将其c_str()方法,它会给你在最后的空终结符。



文章来源: Does std::string contain null terminator?
标签: c++ string null