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

时间:2013-07-22 05:29:07

标签: c++ string

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

非常感谢你!

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:-1)

的std :: string ::数据

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

访问data()+ size()处的值会产生未定义的行为:无法保证空字符终止此函数返回的值所指向的字符序列。请参阅string :: c_str以获取提供此类保证的函数。

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