为什么有人会在C中初始化未分配的内存?

时间:2012-01-04 11:48:11

标签: c initialization memory-management

假设我像这样初始化一个数组:

char a[]="test";

这是为了什么目的?我们知道内容可能会立即更改,因为未分配,因此有人会为此初始化数组?

5 个答案:

答案 0 :(得分:5)

澄清一下,由于OP所述的原因,这段代码是错误的:

char* a;
strcpy(a, "test");

正如其他回复所述,语法“char a [] =”test“”实际上并不这样做。实际效果更像是这样:

char a[5];
strcpy(a, "test");

第一个语句在本地堆栈上分配固定大小的静态字符数组,第二个语句初始化其中的数据。大小由字符串文字的长度确定。与所有堆栈变量一样,该数组在退出函数范围时自动释放。

答案 1 :(得分:1)

这样做的目的是在堆栈或静态数据段上分配五个字节(取决于此代码段发生的位置),然后将这些字节设置为数组{'t','e','s','t','\0'}

答案 2 :(得分:1)

此语法在堆栈上分配一个包含五个字符的数组,相当于:

char a[5] = "test";

数组的元素初始化为作为初始化程序给出的字符串中的字符。确定数组的大小以适合初始化程序的大小。

答案 3 :(得分:1)

分配。该代码相当于

char a[5]="test";

当你输出数字时,编译器只需通过计算文字字符串中的字符来计算字符数组的长度。然后它将长度加1,以包括必要的终止nul '\0'。因此,数组的长度为5,而字符串的长度为4。

答案 4 :(得分:0)

数组分配;它的大小是从用于初始化它的字符串文字中推断出来的(总共5个字符)。

你写过吗

char *a = "test";

然后所有将被分配的将是一个指针变量,而不是一个数组(字符串文字"test"存在于内存中,以便它在程序启动时分配并保持到程序退出)。