将数据从文件加载到struct

时间:2014-11-18 22:11:40

标签: c struct instantiation

我正在尝试从文本文件中读取数据并将数据保存到结构中的变量中。然而,我遇到的问题是我不知道如何制作结构的“新实例”。 Java是我的第一个编程语言,我正在考虑面向对象的算法,但我没有看到如何将它翻译成C.这就是我现在所拥有的:

if (file != NULL) {


    while(status != EOF){
        status = fscanf(file,"%d %d %d",&struct.var1 , &struct.var2 , &struct.var3);
    }

    fclose(file);

}

到目前为止我能够做的是定义我的struct的单个实例,然后添加数据,但是随着while循环的进行,数据被覆盖,所以最后保存到struct中的数据是从文件的最后一行开始。

如果我在Java中执行此操作,我将能够在循环的每次迭代之前创建一个新结构,然后将值传递给它,但因为在CI中不能简单地创建结构的新实例我是不知道该怎么做。这里的任何想法都将非常感激。

3 个答案:

答案 0 :(得分:0)

您有两种选择。

  1. 创建一个struct数组并连续向其中添加数据。
  2. 使用malloc动态分配内存并将数据添加到动态分配的struct。当然,您必须通过数组或列表跟踪这些内容。

答案 1 :(得分:0)

您可以使用malloc()功能分配新内存。但是在使用它们之后你必须小心释放所有这些内存块,否则你将不得不处理内存泄漏。

(struct your_struct)malloc(sizeof(your_struct));

答案 2 :(得分:0)

如果你知道尺寸

,你可以预先声明一个结构数组
#define STATUSMAX 2000;

...
struct StatusType statusList[STATUSMAX];
...

或者,如果size,statusMax是从其他地方传入的

struct StatusType* statusList = malloc(sizeof(struct StatusType) * statusMax);

另一种选择是创建单链或双链表。与Java不同,您将回归到C语言的基础知识 - 您必须知道列表的工作方式以及如何实现它:不要只是假设它是库中的容器。我会让你看一看 - 网上有很多例子。每当您读入新值时,请将新项目分配到列表中并将其读入。