char数组不必是空终止的(不依赖于它的标准库函数包括memcpy,memmove,strncpy - 这个最新命名 - ,printf具有正确的格式字符串).
根据定义,NUL终止字符串(NTCS)需要由NUL终止.它是C标准库的字符串处理实用程序和大多数C程序使用的约定所期望的格式(在C++中,通常使用std :: string)
在 C 中,如果有一个指向数组的指针,则无法确定该数组的长度。正如 @AProgrammer 指出的那样,设计者可以就此保留并强制程序员跟踪所有字符数组的长度。然而,这会使 C 语言的文本处理变得比现在更加困难。
因此,语言设计者决定采用一种约定,允许通过指示字符串结尾的空字符来推断字符串长度。
例如,考虑strcpy:
char *strcpy(char *destination, const char *source);
Run Code Online (Sandbox Code Playgroud)
C 中无法确定指针destination和source指向的数组的长度。因此,如果不存在指示字符串结尾的哨兵值,唯一的其他解决方案就是传递指示字符串长度的额外参数source。
当然,考虑到现代安全性的考虑,引入了接收缓冲区长度参数的字符串处理函数。但在发明空终止字符串时,计算环境看起来非常不同。