我们都知道有一个空字符自动附加到 C 字符串的末尾……C++ 字符串对象怎么样?它的末尾是否还有一个空字符?
太感谢了!
在 C++03 中,不需要将 std::string 存储在以 NUL 终止的缓冲区中,但如果您调用c_str()
它,它将返回指向以 NUL 终止的缓冲区的指针。该缓冲区可以在c_str()
调用内部合法地创建和/或终止。
在 C++11 中,所有std::string
实例都被终止,因此data()
也寻址以 NUL 终止的缓冲区,甚至s[s.size()]
具有明确定义的含义,即返回对终止 NUL 的引用。
std::string
非常像std::vector
:它有一个长度属性,并且在 C++03 中不是零终止的;在 C++11 中,'std::string' 确实似乎被终止了,但我发现将 'std::string' 视为字符的 'std::vector' 而不仅仅是终止缓冲区更容易。
标准::字符串::数据
返回一个指向数组的指针,该数组包含与构成字符串对象值的字符相同的字符序列。
访问 data()+size() 处的值会产生未定义的行为:不能保证空字符会终止此函数返回的值所指向的字符序列。有关提供此类保证的函数,请参见 string::c_str。
程序不得更改此序列中的任何字符。