在 C 11 中 String::c_str() 不再以 Null 结尾吗?
在 C 11 中, string:: 的行为c_str() 一直是一个有争议的问题。一些消息来源表明它可能不再生成以 null 结尾的字符串。
但是,经过仔细检查,很明显事实并非如此。 C 11 中operator[] 的定义要求字符串在内部使用以null 结尾的缓冲区。这意味着根据operator[]定义的c_str()也必须返回一个以null结尾的字符串。
具体来说,C 11标准的第21.4.5节规定operator[]必须返回“对具有值 charT() 的 T 类型对象的引用;引用的值不得修改。”这意味着字符串末尾必须包含一个空字符。
此外,第 21.4.7.1/1 节将 c_str() 定义为“一个指针 p,使得 p i == &operator[](i) 对于每个我在 [0,size()] 中。”这意味着 c_str() 提供对与 operator[] 相同的缓冲区的访问,该缓冲区必须以 null 终止。
因此,尽管最初存在担忧, string::c_str() 仍然保证产生 null- C 11 中的终止字符串。
以上是以下是一些标题选项,请记住问题格式: 直接、清晰: * C 11 中 `string::c_str()` 仍然以 Null 结尾吗? * `string::c_str()` 是否保证 C 语言中的 Null 终止的详细内容。更多信息请关注PHP中文网其他相关文章!