C 创建结构的动态数组
我需要创建一个结构数组,但我必须从文件中读取数组大小。我的问题是我可能用错了指针。我不能使用全局变量。以下是我编写的代码:C 创建结构的动态数组,c,arrays,dynamic,struct,C,Arrays,Dynamic,Struct,我需要创建一个结构数组,但我必须从文件中读取数组大小。我的问题是我可能用错了指针。我不能使用全局变量。以下是我编写的代码: #include <stdio.h> #include <stdlib.h> struct driver { int *amount; int ADT1[9]; int ADO1[9]; }; struct driver totaldrivers[*amount]; #包括 #包括 结构驱动程序 { 整数
#include <stdio.h>
#include <stdlib.h>
struct driver
{
int *amount;
int ADT1[9];
int ADO1[9];
};
struct driver totaldrivers[*amount];
#包括
#包括
结构驱动程序
{
整数*金额;
int-ADT1[9];
int ADO1[9];
};
结构驱动程序totaldrivers[*金额];
我得到的错误(2)是“此处未声明的数量(不在函数中)”和“不知道'totaldrivers'的存储大小”。我试着直接给*amount一个值,但运气不好,即使如此,该值也必须由用户创建的文件获取,并且数字是第一行。这就是我的问题所在。(.txt)文件格式为:
4(条目数量)1234567899786775645(ADT1,ADO1)
.
.
.
我肯定我犯过新手错误,所以如果这个问题很愚蠢,请原谅我。而不是
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”
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”。我假设您的结构的内容应该如下所示(我已经删除了
int*amount
):
要创建这些结构的动态1D数组,首先创建指向驱动程序的1D数组的指针:
struct driver *pDriver;
接下来,为数组中需要的元素数量分配内存。这应该是已知的(N
):
如果要记录元素的数量,应执行以下操作:
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));
我假设您的结构的内容如下(我已删除int*amount
):
要创建这些结构的动态1D数组,首先创建指向驱动程序的1D数组的指针:
struct driver *pDriver;
接下来,为数组中需要的元素数量分配内存。这应该是已知的(N
):
如果要记录元素的数量,应执行以下操作:
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));
在这里,使用数组(第一种方法):
*amount
是驱动程序结构数组的大小。这是定义数组大小的错误方法!!
有很多方法可以定义数组的大小,其中一些方法是:
1) 使用define指令的预处理器:#定义大小12
2) 全局变量:int size 12
您还可以使用指针(第二种方法):
你不应该把你的代码复杂化,放轻松
在这里,使用数组(第一种方法):
*amount
是驱动程序结构数组的大小。这是定义数组大小的错误方法!!
有很多方法可以定义数组的大小,其中一些方法是:
1) 使用define指令的预处理器:#定义大小12
2) 全局变量:int size 12
您还可以使用指针(第二种方法):
你不应该把你的代码复杂化,放轻松 另一种方法是使用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。另一种方法是使用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。结构数组应该是全局的吗?amount
不是全局变量,您需要一个初始化的驱动程序
结构实例来访问它。我认为关键是读取第一行并使用它来调整数组的大小,不要把它放在你的结构中。如果“amount”是条目数,那么不要把它放在结构中。同样,你不需要每个数字有一个int
。相反,一个unsigned int
就足够了。如果结构数组是全局的?amount
不是全局变量,您需要一个初始化的驱动程序
结构实例来访问它。我想关键是读取第一行并使用它来调整数组的大小,不要把它放在你的结构中。如果“amount”是条目数,那么不要把它放在结构中。同样,你不需要每个数字有一个int
。相反,一个无符号整数就足够了。这是不正确的。您必须为变量totaldrivers
创建内存,而不是类型drivers
。很好。纯粹的手指检查和草率的校对。固定的。谢谢,这是不对的。您必须为变量totaldrivers
创建内存,而不是类型drivers
。很好。纯粹的手指检查和草率的校对。固定的。谢谢。这个好像有用。当我完成代码的其余部分后,将很快更新。@RoafBeast Good luck.code非常有用,但我还有一个问题。我被告知我需要使用函数,而不仅仅是一个主函数。如何在函数中传递此数组?尽管此答案正确,但我无法确定如何在函数中传递数组。问我的伙伴们,我找到了一种更适合我的方法。无论如何谢谢你!如果你需要更多的帮助,问另一个问题。祝你好运,这个好像有用。当我完成代码的其余部分后,将很快更新。@RoafBeast Good luck.code非常有用,但我还有一个问题。我被告知我需要使用函数,而不仅仅是一个主函数。我如何在函数中传递这个数组?尽管这个答案是正确的,我还是不知道如何传递