C总是将char数组中的最后一个元素初始化为零吗?

时间:2016-10-19 13:57:51

标签: c gcc

运行此代码

char array[6];
int i;
for ( i = 0; i < 6; ++i )
    printf("%i ", array[i]);

可能的输出:

64 0 -64 77 67 0

我得到总是最后一个元素0,虽然我期待随机值。它是编译器依赖的吗?我正在使用gcc。

3 个答案:

答案 0 :(得分:4)

没有。对于局部变量,C标准没有保证这一点。

未初始化数组的值具有不确定值。因此,您无法访问它们,因此您的代码具有未定义的行为

但具有静态存储持续时间的变量(如全局变量,static限定变量等)初始化为零。

答案 1 :(得分:3)

未定义静态存储持续时间(全局,static本地化)的变量(以及扩展名,数组元素)的内容。

数组中最后一个元素恰好为0的事实 随机。

答案 2 :(得分:3)

最后一个元素在"Test"char array[] = "Test";等字符串常量中为零。在您的示例中,最后一个值偶然为零。

试试这个:

void f1() // prepare non-zero stack
{
  char array[40];

  memset( array, 32, sizeof array ); 
}

void f2() // your array
{
  char array[6];
  int i;
  for ( i = 0; i < 6; ++i )
    printf("%i ", array[i]);
}

int main()
{
  f1();
  f2();
  return 0;
}