2017-07-06 17 views
4
char ch_arry[20] = { S, A, L, L, Y}; 
printf("%s", ch_arry[]); 

它会用空字符填充数组的末尾吗?如果输入到字符数组中的字符数量小于指定的空格数量,会发生什么情况

+1

最后的15个字符的内容是不确定的。 – David

+4

并非如此,@大卫。 C没有部分初始化。 –

+1

请注意,除非宏'S','A','L'和'Y'映射到整型常量,否则需要''S','A','L','L','Y'适合用于初始化字符。 –

回答

4

其余15个字符设置为\0。这是C.

注意的有用的功能,你需要使用

char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'}; 

,除非你有一些疯狂的宏观弄虚作假,和

printf("%s", ch_arry); 
6

C标准(6.7.9初始化)

19初始化过程应以初始化列表的顺序进行,每个初始值设定项提供了fo r特定子对象覆盖以前列出的相同子对象的任何 ; 151)全部 未明确初始化的子对象应该被初始化为 隐含地与具有静态存储持续时间的对象相同。

而且

10如果具有自动存储持续时间的对象没有初始化 明确地,它的值是不确定的。如果具有静态 或线程存储持续时间的对象未被明确初始化,则:

- 如果它具有指针类型,则将其初始化为空指针;

- 如果它具有算术类型,则它初始化为(正数或 无符号)零;

- 如果它是一个聚集体,每一个成员被初始化(递归地)根据这些规则,和任何填充被初始化为零 比特;

所以,如果你有这样

char ch_arry[20] = { 'S', 'A', 'L', 'L', 'Y'}; 

则未明确初始化数组的所有元素将用零隐式初始化的声明。

+0

Upvoted - 我爱你的参考质量答案。你的标准副本显然很好用。 – Bathsheba

+0

@Bathsheba谢谢:) –

+3

另请注意[§6.7.921](http://port70.net/~nsz/c/c11/n1570.html#6.7.9p21) - “如果初始值设定项较少在大括号内的列表中,除了存在聚集的元素或成员,或者用于初始化比数组中的元素大小的已知大小的数组的字符串字符中的更少字符,聚合的其余部分应该被隐式地初始化为相同作为具有静态存储持续时间的对象。“ –

0

你回答了你自己的问题。

剩余的15个字符将被赋予空值。

你在声明数组错误...如果你想ch_array = SALLY,你应该每个角色都使用单倒逗号(“S”这样的)。

对于输出用printf( “%S”,ch_arry);而不是printf(“%s”,ch_arry []);

相关问题