C中未初始化数组中char的默认值是多少?
鉴于以下声明:
char inputBuffer[12];
数组中任何一个char的默认值是多少? 我很想知道这一点,因为如果我想在arrays中清除一个位置,我需要知道给它的价值。
数组元素具有不确定的值,除非它是在文件范围定义的数组或具有static
存储类说明符,然后数组元素被初始化为0
。
#include 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 }
如果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如果未显式初始化具有自动存储持续时间的对象,则其值不确定。 如果未显式初始化具有静态存储持续时间的对象,则:
– 如果它有指针类型,则将其初始化为空指针;
– 如果它有算术类型,则初始化为(正或无符号)零;
– 如果是聚合 ,则根据这些规则初始化(递归)每个成员;
– 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员。