9

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

太感谢了!

4

3 回答 3

9

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

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

于 2013-07-22T05:43:21.960 回答
4

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

于 2013-07-22T05:30:15.307 回答
-1

标准::字符串::数据

返回一个指向数组的指针,该数组包含与构成字符串对象值的字符相同的字符序列。

访问 data()+size() 处的值会产生未定义的行为:不能保证空字符会终止此函数返回的值所指向的字符序列。有关提供此类保证的函数,请参见 string::c_str。

程序不得更改此序列中的任何字符。

于 2013-07-22T05:34:08.180 回答