我有一个我想要创建全局的数组,我想在函数调用中初始化。 我想首先声明它而不知道它的大小:
char str[];
然后将其初始化:
str = char[size];
我该怎么做? 我对c很新,也许我在这里完全走错路,任何帮助都会非常感激。
答案 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分配所需的内存量,并在函数调用中进行初始化。