C 11 的 string::c_str() 是否消除空终止?
在 C 11 中,string::c_str 不再保证产生一个以 null 结尾的字符串。
原因:
在 C 11 中, string::c_str 的定义与 string::data 相同,而 string::data 又被定义相当于 *(begin() n) 0
后果:
这意味着 string::c_str() 可能不再返回以 null 结尾的字符串,在假设此类终止的情况下会导致潜在错误。
解决方案:
解决方案是仅将 string::c_str() 用于与遗留代码的兼容性。对于新代码,请使用 string::data() 代替。虽然 string::data() 不返回以 null 结尾的字符串,但它返回一个指向基础缓冲区的指针,该缓冲区在内部保证以 null 结尾。
实现细节:
在内部,字符串现在需要使用以 null 结尾的缓冲区。第 21.4.5 节中的 operator[] 定义要求,对于 size()
附加说明:
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3