在C ++入门中,给出了在每个字符串文字的末尾添加空字符。为什么编译器会这样做?
答案 0 :(得分:6)
“在C(及其衍生的语言)开发时,内存非常有限,因此只使用一个字节的开销来存储字符串的长度很有吸引力。当时唯一受欢迎的选择,通常称为“Pascal字符串”(虽然早期版本的BASIC也使用),使用一个前导字节来存储字符串的长度。这允许字符串包含NULL并使得查找长度只需要一次内存访问(O (1)(常数)时间)。
然而,C设计师Dennis Ritchie选择遵循已经在BCPL '中建立的NULL终止惯例,以避免因将数量保持在8位或9位而导致的字符串长度限制插槽,部分是因为根据我们的经验,保持计数似乎不如使用终结器' ......“
答案 1 :(得分:1)
这是从大块内存中找到字符串结尾的最佳方法! 并且整个字符串库函数都认为字符串是空终止的;)
答案 2 :(得分:0)
因为C字符串是null-terminated。