首页 > 后端开发 > C++ > C 11 中的'c_str()”仍然保证返回以 null 结尾的字符串吗?

C 11 中的'c_str()”仍然保证返回以 null 结尾的字符串吗?

Barbara Streisand
发布: 2024-10-28 09:22:02
原创
329 人浏览过

Is `c_str()` in C  11 still guaranteed to return a null-terminated string?

C 11 中的 c_str() 和空终止字符串

在 C 11 中, basic_string::c_str() 的定义引发了问题:它仍然会产生以 null 结尾的字符串吗?

问题

在 C 11 中,basic_string::c_str 被定义为与 basic_string::data 对齐,依次与 (begin() n) 和 (&*begin() n) 对齐。字符串末尾没有空字符的明确要求。

答案

尽管缺乏明确的定义,但 C 11 中的字符串需要在内部使用空终止缓冲区。这在operator[]的定义中很明显:

“返回:*(begin() pos) 如果 pos

由于 c_str 是根据运算符[]定义的,并且 c_str 和 data 都必须是 O(1),因此实现被迫使用以 null 结尾的缓冲区。

其他注意事项

operator[] 的返回值要求意味着您可以使用 &operator[](0) 来检索 c_str()。这意味着终止空字符必须驻留在同一缓冲区中。因此,即使延迟初始化终止符,也无法在中间状态下观察到它。

结论

与初始假设相反,C 11 中的 c_str() 是仍然保证生成以 null 结尾的字符串,确保与遗留代码的兼容性并实现高效的字符访问。

以上是C 11 中的'c_str()”仍然保证返回以 null 结尾的字符串吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板