因此,对于我的学校项目,将通过 stdin
输入一个大型 CSV 文件。我们必须根据列对其进行排序,并将其打印为排序后的 csv 文件。
我现在要做的步骤是弄清楚如何保留 realloc
正在寻找struct
数组,以便如果没有足够大的空间来容纳来自 stdin
的数据,数组就会增长。我们不知道将在 CSV 文件中输入的确切行数。现在我们只是使用静态量来测试并查看这些值是否分配给 struct
s。
我仍然是 C 的初学者,所以我不清楚如何像迭代数组一样迭代指针。由于我们使用的是静态数量 struct
s 在数组中,我们可以使用 array[i]
进行迭代就像在 Java 中一样,但是你如何迭代类似 *array
的东西? ?
我不知道从哪里开始创建这个动态数组。我试过了
struct array* testArray = (array*)malloc(sizeof(testArray));
但我不知道如何像使用 array[i]
对静态数组那样迭代它.
任何帮助将不胜感激,抱歉文字墙......
最佳答案
您可以像使用数组(使用索引)一样导航 malloc 空间,但似乎您的主要问题在于 malloc 的使用。 Malloc 的参数是您要分配的字节 大小。因此,如果您想要一个结构体数组,您首先需要使用 sizeof(struct array)
找出一个结构体包含多少字节。 ,然后确定您想要多大的数组,比方说 N
。所以这行代码应该看起来更像 struct array* testArray = malloc(N * sizeof(struct array));
。 malloc 的返回值将是一个 void 指针,其中包含已分配空间的第一个字节的内存地址。将此值分配给 testArray 后,它将被类型转换为分配的变量类型( struct array *
)。现在您可以使用指针算术来访问特定索引 i
与 *(testArray + i)
,或者简单地 testArray[i]。如果您发现N
大小不够,可以使用 realloc 将数组大小增加到 2N
,或任何认为必要的尺寸。
关于c - 动态扩展结构体数组 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46509513/