char ch_arry[20] = { S, A, L, L, Y};
printf( "%s", ch_arry[] );
它会用空字符填充数组的末尾吗?
char ch_arry[20] = { S, A, L, L, Y};
printf( "%s", ch_arry[] );
根据C标准(6.7.9 Initialization):
19 初始化必须按照初始化器列表的顺序进行,为特定子对象提供的每个初始化器都会覆盖同一子对象先前列出的初始化器;所有未显式初始化的子对象将被隐式初始化,其方式与具有静态存储期的对象相同。
并且
10 如果具有自动存储期的对象未经显式初始化,则其值是不确定的。如果没有明确初始化具有静态或线程存储期的对象,则:
— 如果它具有指针类型,则初始化为null指针;
— 如果它具有算术类型,则初始化为(正或无符号)零;
— 如果它是一个聚合体,则根据这些规则递归地初始化每个成员,并将任何填充初始化为零位。
因此,如果您有以下声明:
char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'};
那么,数组中所有未显式初始化的元素将会隐式地被初始化为 0。
\0
。这是C语言的一个有用特性。char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'};
printf("%s", ch_arry);
你自己回答了问题。
剩下的15个字符将被赋予空值。
而且你声明数组的方式是错误的...如果你想让ch_array = SALLY,你应该在每个字符上使用单引号('S'这样)。
输出时使用printf("%s", ch_arry);而不是printf("%s", ch_arry[]);