这是如何工作的::
char Test1[8] = {"abcde"} ;
AFAIK,这应该作为
存储在Test1的内存中a b c d e 0 SomeJunkValue SomeJunkValue
而是存储为:
a b c d e 0 0 0
初始化只在字符串文字之后添加一个尾随的NULL字符,但是如何以及为什么所有其他数组成员被初始化为 NULL ?
此外,关于什么是基础方法或功能的任何链接或任何概念性想法:char TEST1[8] = {"abcde"} ;
将非常有用。
怎么样:
char Test1[8] = {"abcde"} ;
与
不同char Test1[8] = "abcde" ;
答案 0 :(得分:7)
部分初始化聚合的未指定成员被初始化为该类型的零。
6.7.9初始化
21 - 如果括号括起的列表中的初始值设定项少于元素或成员 用于初始化已知数组的字符串文字中的聚合或更少字符 大小比数组中的元素大,其余的聚合应该是 隐式初始化与具有静态存储持续时间的对象相同。
10 - [...]如果没有初始化具有静态或线程存储持续时间的对象 明确地说:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它有算术类型,则初始化为(正或无符号)零; [...]
对于数组char Test1[8]
,初始值设定项{"abcde"}
和"abcde"
完全等效于6.7.9:14:
字符类型数组可以用字符串文字或UTF-8字符串文字初始化,可选择用大括号括起来。