如何在C中确定空数组的值

时间:2013-04-26 11:58:55

标签: c arrays memory

这是代码。

int main(int argc, char *argv[])
{
    char name[5];

    printf("%s\n",name);

    system("PAUSE");
    return 1;
}

printf函数输出©。它为什么使用那个角色?在不同的实例中,使用其他字符。我试图更多地了解内存在C中是如何工作的。

干杯:)

编辑 - 谢谢大家。你的所有答案对我都非常有用。

4 个答案:

答案 0 :(得分:2)

tl; dr:值未确定。

取决于编译器,数组的值是未确定的(大多数情况下)或零(某些特定的编译器清理堆栈)。

大多数情况下,数组只是从堆栈中取出的一些内存空间,因此在使用它之前,根据内存的这个区域,你可以在那里有许多不同的值。

答案 1 :(得分:1)

由于在函数中声明array,因此初始值未定义。如果array被声明为全局,那么它将被初始化为所有zero。来自draft standard6.7.9.10

部分
  

如果未明确初始化具有自动存储持续时间的对象,   它的价值是不确定的。

答案 2 :(得分:0)

根据标准,它是undefined,这意味着它可以是任何东西。如果您想确保它是一个特定值,则必须自行设置(例如,使用memset())。

这并不意味着某些编译器可能会将其设置为特定值。

答案 3 :(得分:0)

未初始化数组的使用是未定义的行为,因此printf调用可能导致任何结果,包括应用程序崩溃。在现实生活中,它将从堆栈中打印出一些垃圾。