创建动态结构数组

时间:2013-12-30 19:06:22

标签: c arrays dynamic struct

我需要创建一个结构数组,但我必须从文件中读取数组大小。我的问题是我可能正在使用指针都错了。我不能使用全局变量。这是我制作的代码:

#include <stdio.h>
#include <stdlib.h>
struct driver
{
       int *amount;
       int ADT1[9];
       int ADO1[9];
};

struct driver totaldrivers[*amount];

我得到的错误(2)是“未声明的数量(不在函数中)”和“总驱动程序的存储大小”未知“。我尝试直接给*值一个值,但没有运气,即使如此,用户创建的文件必须采用该数量,数字是第一行。这就是我遇到问题的地方。 (.txt)文件格式为:

4(参赛人数)
123456789,978675645(ADT1,ADO1)



我确信我犯了新手错误,如果问题很愚蠢,请原谅我。

4 个答案:

答案 0 :(得分:3)

我假设您的结构内容应如下(我已删除int *amount):

struct driver
{
    int ADT1[9];
    int ADO1[9];
};

要创建这些结构的动态1D数组,首先要创建指向driver的1D数组的指针:

struct driver *pDriver;

接下来,为数组中所需的元素数分配内存。这应该是已知的(N):

pDriver = malloc(N * sizeof(*pDriver));

如果你想记录元素的数量,你应该这样做:

struct driver
{
    int ADT1[9];
    int ADO1[9];
};

struct driverArray
{
    int numDrivers;
    struct driver *pDriver;
};

struct driverArray driverArr;

driverArr.numDrivers = N;
driverArr.pDriver = malloc(driverArr.numDrivers * sizeof(*driverArr.pDriver));

答案 1 :(得分:1)

而不是

struct driver totaldrivers[*amount];

设置一个引用它的指针,然后在知道你需要的大小时从堆中分配数组。

struct driver totaldrivers[];
int amount=7; /* for example */
totaldrivers=malloc(sizeof(struct driver)*amount);
/* Apology for the typo; I wrote "driver=" the first time. Good catch! */

您可能也不希望在结构内部使用“int * amount”。

答案 2 :(得分:0)

struct driver totaldrivers[*amount]; 

这里,您使用数组(第一种方法):

* amount是驱动程序结构数组的大小。这是定义数组大小的错误方法!! 有很多方法可以定义其中一些数组的大小:

1)使用define指令的预处理器:#define size 12

2)全局变量:int size 12

你也可以使用指针(第二种方法):

struct driver *totaldrivers;

totaldrivers= malloc(nb * sizeof(*totaldrivers)); // nb : number of elements  

你不应该把你的代码复杂化吧!

答案 3 :(得分:0)

另一种方法是使用C99中引入的动态堆栈分配工具。只需确保您的编译器是C99编译器。

正如其他人所说,免除金额。

struct driver
{
    int ADT1[9];
    int ADO1[9];
};

引入一个功能来做你想做的事。在这里分配数组

void RunWith(int amount)
{
    struct driver totaldrivers[amount];

    ... 
}

在来电者中,传入金额

int main ()
{
    RunWith(25);
    ...
    return 0;
}

不需要malloc或free。