【发布时间】:2021-02-03 00:13:02
【问题描述】:
例如,我声明一个 char 数组,所有值都按以下方式设置为零:
char array[4] = {0};
如果我给它赋值,例如:
array[0] = 'A';
array[1] = 'B';
array[2] = 'C';
我需要像这样终止数组吗?:
array[3] = '\0';
或者操作char array[4] = {0} null 在任何分配之前终止?
【问题讨论】:
-
数组完全被0字节填充。空终止与此没有什么不同。但是不会为空字节添加另一个元素。
-
也就是说 {0} null 终止了字符串?
-
请注意
char array[4] = {'A'};不会用As 填充整个数组,而只会填充第一个元素。然而,其余部分用 0 填充。 -
与所有变量初始化一样,没有初始化器的成员是零填充的。如果您提供
{0},您的初始化列表中将有 1 个字节,其余的将用零填充。如果将该数组用于最多包含 3 个字符的字符串,则它以空值结尾。如果你将它用于不同的目的,它仍然包含 0 个字节,但术语“空终止”在那里没有任何意义。 -
从概念上讲,这会第二次写入一个 nul 终止符。实际上,假设事情在范围内,编译器应该能够识别多余的写入并摆脱它。就个人而言,我认为明确性是首选。
标签: arrays c initialization c-strings null-terminated