为什么char数组必须以空字符结尾。我有没有理由在每个char数组中添加空字符?
似乎他们得到同样的待遇。
答案 0 :(得分:8)
一个char数组不一定是空终止的(不依赖于它的标准库函数包括memcpy,memmove,strncpy - 这个最新命名 - ,printf,格式正确的字符串)。< / p>
根据定义,NUL终止字符串(NTCS)需要由NUL终止。它是C标准库的字符串处理实用程序和大多数C程序使用的约定所期望的格式(在C ++中,通常使用std :: string)
答案 1 :(得分:3)
在C中,如果你有一个指向数组的指针,那么就无法确定该数组的长度。正如@AProgrammer指出的那样,设计人员可能已将其留在那里并迫使程序员跟踪所有字符数组的长度。但是,这会使C中的文本处理比现在更难。
因此,语言设计者采用了一种约定,该约定允许字符串长度由表示字符串结尾的空字符的存在来推断。
例如,考虑strcpy
:
char *strcpy(char *destination, const char *source);
C中无法确定指针destination
和source
指向的数组长度。因此,如果没有sentinel值来指示字符串的结尾,唯一的其他解决方案就是传递额外的参数来指示source
字符串的长度。
当然,鉴于现代安全性考虑,已经引入了接收缓冲区长度参数的字符串处理函数。但是在发明以null结尾的字符串时,计算环境看起来非常不同。
答案 2 :(得分:0)
通常没有理由这样做,但是你必须知道,根据定义,每个字符串都是一个带有空终止符的char
数组。如果您的char
数组表示一个字符串,那么如果省略空终止符,则使用C字符串的每个函数都不会返回正确的值,或者行为与预期的不同。
但char
类似于int
,float
或double
,因此您可以根据需要自由创建char
数组,而无需因为它们是空终止的。
答案 3 :(得分:0)
仅当您想将其用作字符串时。然后所有的C / C ++字符串函数将在最后搜索null char,如果它不存在,它们将继续搜索,迟早你的应用程序将崩溃。
如果你只打算使用数组字符作为字符数组,从不将它们称为字符串,那么没问题。它就像一组整数。