c - 动态扩展结构体数组 C

标签 c arrays pointers struct

因此,对于我的学校项目,将通过 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/

相关文章:

c++ - 在 C++ 中拥有多个指向单个对象的指针的正确方法是什么?

C 链表错误

c++ - 记事本显示 Unicode 字符,因为文件是 ANSI?

ios - 将数组中的项目添加到特定索引处的不同数组

java - 将 JSON 响应存储在数组中

c - 取消引用指向不完整类型的指针 'struct ____'

c++ - free(): invalid pointer error in C++

c - 以循环方法调度 pthread

c - 在 Windows 上的 C 中使用哪种路径格式, "D:\\source.txt"或 "D:/source.txt"?

javascript - 如何删除包含特定短语的特定值之间的数组项