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()
附加说明:
以上是C 11 的 `string::c_str()` 仍然以 Null 终止吗?的详细内容。更多信息请关注PHP中文网其他相关文章!