C - 在函数中初始化全局数组

时间:2010-11-21 21:01:34

标签: c arrays initialization

我有一个我想要创建全局的数组,我想在函数调用中初始化。 我想首先声明它而不知道它的大小:

char str[];

然后将其初始化:

str = char[size];

我该怎么做? 我对c很新,也许我在这里完全走错路,任何帮助都会非常感激。

4 个答案:

答案 0 :(得分:9)

这样做的方法是使用malloc。首先声明一个指针:

char *str;

然后在init函数中malloc

str = malloc(sizeof(*str) * size_of_array);

这会分配size_of_array指向str的大小的char元素(在这种情况下为if (str == NULL) { // allocation failed // handle the error } )。

您应该检查分配是否失败:

free

通常情况下,当你完成它时,你必须确保str这个已分配的内存。但是,在这种情况下,free是全局的,因此它永远不会超出范围,并且当程序结束时内存将为{{1}} d。

答案 1 :(得分:2)

使您的全局数组声明如下所示:

char *str = NULL;

然后在初始化函数中执行以下操作:

void init(int size)
{
    ...
    str = malloc(size * sizeof(char));
    ...
}

答案 2 :(得分:1)

char* str;

str = (char*)malloc(size*sizeof(char));

根据定义,您可以跳过自*sizeof(char)以来的sizeof(char) == 1

不要忘记使用free

取消分配内存

答案 3 :(得分:1)

创建char* str;而不是数组。然后,使用malloc或calloc分配所需的内存量,并在函数调用中进行初始化。