C++null是否终止std::字符串



可以为c++常量字符串调用.c_str((。

为了有效地实现这一点,这意味着它必须在内部存储一个额外的null字符。(否则,.c_str((调用将需要复制或修改数据(

因此,C++字符串总是以null结尾,甚至在调用C_str((之前也是如此。

对吧?还是错了?

是的,从C++11开始就需要它。

对于std::stringss[s.size()]必须为0。(请注意,试图修改该元素的行为是未定义的。(

请注意,允许s在该最终终止符之前包含0。在这方面,它不同于普通的C样式字符串。

参考:https://en.cppreference.com/w/cpp/string/basic_string

在C++11之前,字符串的数据缓冲区不需要以null终止,甚至是连续的。c_str()的实现被允许将数据复制到单独的连续空终止缓冲区。然而,在实践中,还没有已知的实现真正做到了这一点,为了提高效率,数据缓冲区通常是连续的并且以null结尾。

由于C++11,数据缓冲区要求连续且以null结尾,特别是为了保持c_str()data()方法的实现简单。

最新更新