我需要创建一个结构数组,但我必须从文件中读取数组大小。我的问题是我可能正在使用指针都错了。我不能使用全局变量。这是我制作的代码:
#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)
。
。
。
我确信我犯了新手错误,如果问题很愚蠢,请原谅我。
答案 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。