为什么char数组必须以空字符结束?我必须为每个char数组添加空字符吗?它们似乎被同样处理。
字符数组不一定需要以null结尾(不依赖此的标准库函数包括memcpy
、memmove
、strncpy
(这个最近被错误命名)、printf
使用正确的格式字符串)。
一个以NUL结尾的字符串 (NTCS) 的定义需要以NUL结尾。这是C标准库字符串处理实用程序所期望的格式,并且是大多数C程序使用的约定(在C++中,通常使用std::string
)。
char *strcpy(char *destination, const char *source);
在C语言中无法确定指针destination
和source
所指向的数组长度。所以,在没有哨兵值表示字符串结尾的情况下,唯一的解决方法就是传递额外的参数来指示source
字符串的长度。
当然,在现代安全考虑方面,已经引入了带有缓冲区长度参数的字符串处理函数。但是,在空字符结尾的字符串被发明时,计算机领域的情况大不相同。
只有当您想将其用作字符串时才需要注意。然后,所有的C/C++字符串函数都会在末尾搜索空字符,如果没有找到,它们将继续搜索,最终导致应用程序崩溃。
如果您只打算将字符数组用作字符数组,从不将其引用为字符串,则没有问题。这就像一个整数数组一样。