3

我只是想知道以下是否有效。我有一个名为的结构foo,其定义如下:

struct foo {
    char name[255];
    int amount;
};

在运行时,我需要创建一个由上述结构组成的数组,其大小取决于我从文件输入中接收到的值。假设这个尺寸是k. 下面的代码会适当地分配一个动态大小的结构数组吗?

struct foo *fooarray;
fooarray = malloc(k * sizeof(struct foo));

编辑:如果我想访问这些数组中结构的成员,我会使用格式fooarray[someindex].member吗?

4

3 回答 3

4

这将起作用(并且您的访问是正确的)。此外,您可以使用以下成语防止大小错误:

fooarray = malloc(k * sizeof *fooarray);

calloc如果您的项目以零金额和空白字符串而不是垃圾开头会更好,请考虑使用。

但是,这不是 VLA。这是一个动态分配的数组。VLA 将是:

struct foo fooarray[k];
于 2014-07-02T02:53:18.957 回答
1

是的,它会的。
失败时它将返回 0。
当你完成它时,你必须释放 malloc 返回的内存

您可以访问第一个成员:

fooarray[0].name
fooarray[0].amount

第二个为:

fooarray[1].name
fooarray[1].amount

ETC..

于 2014-07-02T02:51:59.900 回答
-1

在这种方法中可以使用另一种不同的符号:

struct foo {
    char name[255];
    int amount;
};

int main (void)
{
 struct foo *fooarray;
 struct foo *fooptr[5];

 unsigned int i = 0;

 for (i = 0;  i < 5; i++)
  fooptr[i] = malloc(1* sizeof(struct foo));

 fooptr[2]->name[3] = 'A';
 printf ("\nfooptr[2]->name[3]=%c\n",fooptr[2]->name[3]);
}
于 2014-07-02T06:38:40.583 回答