char ch_arry[20] = { S, A, L, L, Y};
printf( "%s", ch_arry[] );
它会用空字符填充数组的末尾吗?
答案 0 :(得分:6)
从C标准(6.7.9初始化)
19初始化应在初始化程序列表顺序中进行,每个顺序 初始化程序为特定的子对象提供覆盖任何子对象 以前列出的同一子对象的初始值设定项; 151)全部 未初始化的子对象应初始化 隐含地与具有静态存储持续时间的对象相同。
和
10如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。如果一个对象有静态 或线程存储持续时间未明确初始化,然后:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则将其初始化为(正数或 无符号)零;
- 如果是聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零 比特;
所以如果你有这样的声明
char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'};
然后显式未初始化的所有数组元素将使用零隐式初始化。
答案 1 :(得分:4)
其余15个字符设置为\0
。这是C的有用功能。
请注意,您需要使用
char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'};
除非你有一些疯狂的宏诡计,并且
printf("%s", ch_arry);
答案 2 :(得分:0)
你回答了自己的问题。
剩下的15个字符将被赋予空值。
你声明数组是错误的...如果你想要ch_array = SALLY,你应该对你的每一个角色使用单个倒置的逗号(' S'这样)。
输出使用printf("%s",ch_arry);而不是printf("%s",ch_arry []);