C - 在函数中初始化全局数组
我有一个数组,我想使全局,我想在函数调用初始化。 我想首先声明它不知道它的大小:C - 在函数中初始化全局数组
char str[];
后来初始化:
str = char[size];
我怎样才能做到这一点? 我对c很陌生,也许我在这里完全错误的方式,任何帮助将不胜感激。
要做到这一点的方法是malloc
。在init函数,你malloc
它
char *str;
然后:一是申报只是一个指针
str = malloc(sizeof(*str) * size_of_array);
这是分配点str
向(在这种情况下char
)大小的size_of_array
元素。
你应该检查分配失败:
if (str == NULL) {
// allocation failed
// handle the error
}
通常你必须确保你free
这个分配的内存当你用它做。但是,在这种情况下,str
是全局的,所以它不会超出范围,程序结束时内存将为free
d。
char* str;
str = (char*)malloc(size*sizeof(char));
根据定义,您可以跳过*sizeof(char)
,因为sizeof(char) == 1
。
不要忘了取消分配使用free
如果您想成为一般人,请使用'sizeof(* str)',这样您就不必重复类型名称。此外,在C中,您不应该投射malloc的结果。 – 2010-11-21 21:06:10
在C中,你不应该真的投射malloc的结果 - 你只需要在C++中做到这一点 - 它应该避免在C中,因为它可以屏蔽否则有用的警告。 – 2010-11-21 21:06:53
创建char* str;
而不是数组的内存。然后,使用malloc或calloc分配所需的内存量,并在函数调用中进行初始化。
让您的全局数组声明是这样的:
char *str = NULL;
在你的初始化函数
然后做这样的事情:
void init(int size)
{
...
str = malloc(size * sizeof(char));
...
}
'sizeof(char)'的定义是1。如果你想编写适用于任何类型的代码,可以使用'sizeof(* str)'。 – 2010-11-21 21:08:59
@Ben:true,但无论类型如何,包含'sizeof'都是一个好习惯。我很清楚支持'sizeof(* str)'的参数,但在这种情况下我仍然更喜欢'sizeof(char)'。 – 2010-11-21 21:11:28
在C,你真的不应该投malloc的结果 - 你只有在C++中真的需要这么做 - 它应该在C中避免,因为它可以屏蔽其他有用的警告。 – 2010-11-21 21:06:18
如果你想成为一般的,使用'sizeof(* str)',所以你不必重复类型名称。此外,在C中,您不应该投射malloc的结果。 – 2010-11-21 21:06:31
@Paul,@Ben:谢谢,我更新了anwer – 2010-11-21 21:08:12