运行此代码
char array[6];
int i;
for ( i = 0; i < 6; ++i )
printf("%i ", array[i]);
可能的输出:
64 0 -64 77 67 0
我得到总是最后一个元素0,虽然我期待随机值。它是编译器依赖的吗?我正在使用gcc。
答案 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;
}