我只是想知道以下方法是否有效。我有一个结构
称为foo
,其定义如下:
struct foo {
char name[255];
int amount;
};
在运行时,我需要创建一个上述结构的数组,其大小取决于我从文件输入中接收到的值。假设此大小为
k
。以下代码是否会适当地分配动态大小的结构数组?struct foo *fooarray;
fooarray = malloc(k * sizeof(struct foo));
编辑:如果我想访问这些数组中的结构的成员,我将使用格式
fooarray[someindex].member
吗? 最佳答案
那将起作用(并且您的访问是正确的)。另外,您可以使用以下成语来防止尺寸错误:
fooarray = malloc(k * sizeof *fooarray);
考虑使用
calloc
是否可以让您的项目以零数量和空白字符串(而不是垃圾)开头很好。但是,这不是VLA。这是一个动态分配的数组。 VLA为:
struct foo fooarray[k];