C中未初始化数组中char的默认值是多少?

时间:2014-07-17 07:55:03

标签: c arrays char initialization

鉴于以下声明:

char inputBuffer[12];

数组中任何一个char的默认值是多少? 我很想知道这一点,因为如果我想在数组中清除一个位置,我需要知道给它的价值。

2 个答案:

答案 0 :(得分:7)

数组元素具有不确定的值,除非数组在文件范围定义或具有static存储类说明符,然后数组元素被初始化为0

 #include <stdio.h>

 char inputBuffer1[12];          // elements initialized to 0
 static char inputBuffer2[12];   // elements initialized to 0

 void foo(void)
 {
     char inputBuffer3[12];         // elements have indeterminate value!
     static char inputBuffer4[12];  // elements initialized to 0
 }

答案 1 :(得分:4)

如果char inputBuffer[12];是全局的或静态的,则会使用\0

进行初始化
char inputBuffer1[12];  /* Zeroed */
static char inputBuffer1[12];  /* Zeroed */

int fn()
{
  static char inputBuffer3[12];  /* Zeroed */
}

如果它是函数本地的,它包含垃圾值。

int fn2()
{
  char inputBuffer4[12];  /* inderminate value */
}

引自 ISO / IEC 9899:TC2委员会草案 - 2005年5月6日WG14 / N1124

部分 6.7.8初始化(强调我的)

  

10如果未初始化具有自动存储持续时间的对象   显然,它的价值是不确定的。如果一个对象有静态   存储持续时间未明确初始化,然后:
- 如果有   指针类型,它被初始化为空指针;
- 如果有的话   算术类型,初始化为(正或无符号)零;
-   如果是聚合,则会初始化每个成员(递归)   根据这些规则;
- 如果是工会,则是第一个指定成员   根据这些规则初始化(递归)。