C++中的字符串对象末尾是否有空字符?

use*_*165 7 c++ string

我们都知道自动附加到C字符串末尾的空字符... C++字符串对象怎么样?它的末尾是否还有一个空字符?

非常感谢!

Ton*_*roy 9

在C++ 03中,std :: string不需要存储在NUL终止的缓冲区中,但如果你调用c_str()它,它将返回一个指向NUL终止缓冲区的指针.可以在c_str()呼叫内合法地创建和/或终止该缓冲区.

在C++ 11中,所有std::string实例都被终止,因此data()也解决了NUL终止的缓冲区,甚至s[s.size()]具有明确定义的含义,返回对终止NUL的引用.


Arn*_*age 4

std::string很像 a std::vector:它有一个长度属性,并且在 C++03 中不是以零结尾;在 C++11 中,'std::string' 似乎已终止,但我发现更容易将 'std::string' 视为字符的 'std::vector' 而不仅仅是终止的缓冲区。

  • 这并不像“不”那么简单。`[begin(), end())` 之间不必有空终止符,但 `c_str()` 和 `data()` 都返回一个指向空终止数组的指针。 (5认同)
  • 此外,“c_str()”可用于获取 C 类型以 null 结尾的字符串。 (3认同)