我只是想知道以下方法是否有效。我有一个结构
称为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];

10-06 11:24