为什么C ++字符串以空终止符结尾?

时间:2011-08-28 09:49:33

标签: c++

  

可能重复:
  What's the rationale for null terminated strings?

我的问题很简单:为什么C ++字符串以空终止符结尾?这是为了让你不需要继续指望它的长度吗?

4 个答案:

答案 0 :(得分:5)

C和C ++中的传统字符串使用空终止符来指示字符串的结尾。由于字符串指针只是指向一个字符数组,没有任何长度或其他元数据,因此null终止符是确定字符串长度的唯一方法。

至于为什么这样做,这是一个更难回答的问题。有许多方法可以存储字符串数据,这只是其中之一。

答案 1 :(得分:0)

存储原始字符串有两种基本技术,一种用于在头文件中存储长度,另一种用于结尾使用零终止符。

C语言的设计者选择后者。这就是为什么。 C ++刚刚继承了这个,std::string使用了这种技术,因此c_str()是O(1)。注意:我不知道标准是否需要这个,甚至不关心。

答案 2 :(得分:0)

字符串可以被认为是可变长度字段。将计数保持在某个位置将需要某种格式,例如首先存储长度然后存储字符串(如ID3v2标签中的帧头)。保持终结符字符标记可变长度字段的结尾是另一种方法。 C选择这种方式来标记字符串字段的终止。取决于我们如何解释位和字节序列。

答案 3 :(得分:0)

不是官方的答案,但我可以认为C(以及后来的C ++)背后的原因是字符串以零结尾是因为如果加载到内存中的值为零(空终止符),它只需要一个机器指令进行分支。那个,它只有一个字节,而不是Pascal字符串,限制为255个字符而不添加另一个字节。