字符数组初始化

时间:2012-09-26 07:37:12

标签: c

这是如何工作的::

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" ;

1 个答案:

答案 0 :(得分:7)

部分初始化聚合的未指定成员被初始化为该类型的零。

  

6.7.9初始化

     

21 - 如果括号括起的列表中的初始值设定项少于元素或成员   用于初始化已知数组的字符串文字中的聚合或更少字符   大小比数组中的元素大,其余的聚合应该是   隐式初始化与具有静态存储持续时间的对象相同。

     

10 - [...]如果没有初始化具有静态或线程存储持续时间的对象   明确地说:

     
      
  • 如果它有指针类型,则将其初始化为空指针;
  •   
  • 如果它有算术类型,则初始化为(正或无符号)零; [...]
  •   

对于数组char Test1[8],初始值设定项{"abcde"}"abcde"完全等效于6.7.9:14:

  

字符类型数组可以用字符串文字或UTF-8字符串文字初始化,可选择用大括号括起来。