我们都知道自动附加到C字符串末尾的空字符... C ++字符串对象怎么样?它的末尾是否还有一个空字符?
非常感谢你!
答案 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以获取提供此类保证的函数。
程序不得改变此序列中的任何字符。