char[]不必被NUL终止.当您想要将char数组用作字符串时,它是一种约定.您可以将char []用于您自己的目的,而无需任何终止符.
这是一个方便的问题.
ISO C标准的第7.1.1节以这种方式定义了一个字符串:
甲串是由封端的字符的连续序列,并且包括第一个空字符.
有许多可能的方法来表示字符串,例如使用计数和数组,或计数和指针.对于字符串文字和处理字符串的标准库函数,Null终止恰好是C的选择方式.
这很方便,因为空字符并不真正用于其他任何东西.它不可打印,它不是具有某些已定义显示行为的控制字符,例如以某种特定方式移动光标.
你可以拥有几乎任何东西的数组,但是使用零值来标记序列结尾的约定对于其他类型来说并不方便.对于整数或浮点类型,零是一个有效值,您可能希望将其作为数组中的普通数据.
指针确实有一个可用于标记序列结尾的值:空指针NULL.事实上它有时会以这种方式使用.AC程序的命令行参数作为指向字符串的指针序列传递; 该序列的长度由终止空指针的值表示argc 并标记.另请参阅类Unix系统上的environ指针和exec*()函数.
(但对于某些应用程序,空指针也可以是有效值,因此它不能用作终结符.)
字符串操作是C语言和库的重要组成部分,因此有一个如何表示字符串的约定是有意义的.该约定不适用于其他类型的数组.
(顺便说一句,重要的是要记住,这NULL是一个扩展为空指针常量的宏.使用该名称NULL引用空字符 是不正确的'\0'.根据上下文,两者都可以在C源代码中表示为常量0,但它们是'完全不同的东西.)