在 C 中,您可以部分初始化结构或数组,结果初始化器中未提及的成员/元素被零初始化。(C99 第 6.7.8.19 节)。例如:-
int a[4] = {1, 2};
// a[0] == 1
// a[1] == 2
// a[2] == 0
// a[3] == 0
您还可以使用字符串文字(C99 第 6.7.8.14 节)初始化“字符类型的数组”,以及“连续字符......初始化数组的元素”。例如:-
char b[4] = "abc";
// b[0] == 'a'
// b[1] == 'b'
// b[2] == 'c'
// b[3] == '\0'
一切都很简单。但是,如果您明确给出数组的长度,但使用的文字太短而无法填充数组,会发生什么?剩余的字符是零初始化的,还是它们有未定义的值?
char c[4] = "a";
// c[0] == 'a'
// c[1] == '\0'
// c[2] == ?
// c[3] == ?
把它当作一个部分初始化器是有意义的,它的行为完全char c[4] = "a"
像规范要求。char c[4] = {'a'}
char d[N] = ""