从文件中动态读取结构时,fread无法正常工作

时间:2013-01-20 07:18:55

标签: c struct fwrite fread file-handling

我正在创建链接列表,然后将其写入文件并再次读取。我正在使用fwrite和fread一次编写和读取结构的整个实例。但问题是它无法正常工作。我想在看到输出文件后写的工作正常,但仍然不确定。但阅读根本不起作用。

以下是结构

struct student
{
int roll_num;
char name[100];
struct student *next;
};

以下是逻辑

ifd = fopen("qwer1234.txt","wb");
struct student *temp;
temp = start;
while(temp != NULL)
{
    fwrite(temp, sizeof(struct student), 1, ifd);
    temp = temp->next;
}
close(ifd);


ifd = fopen("qwer1234.txt","rb");
temp = NULL;
temp = malloc(sizeof(struct student));
fread(temp, sizeof(struct student), 1, ifd);
start = temp;
//temp->next = NULL;
printf("%s\t%d\n",temp->name,temp->roll_num);
temp = malloc(sizeof(struct student));
/*while(fread(temp, sizeof(struct student), 1, ifd) == 1)
{

    temp->next = start;
    start = temp;
    printf("%d/n",temp->roll_num);
    temp = malloc(sizeof(struct student));

}*/
close(ifd);

虽然我暂时只阅读一个实例,但它仍无效。没有任何内容存储在temp->名称中,0存储在temp-> roll_num中。我坚持了4个小时。我可以通过单独存储结构元素来实现,但这次想以不同的方式进行。

对于所有重要人物,这是一个家庭作业问题。

非常感谢任何帮助。谢谢:))

1 个答案:

答案 0 :(得分:1)

首先,

close(ifd); 

不正确,因为它不是描述符,而是FILE*。使用:

fclose(ifd);

由于你没有刷新,除非它是一个相当大的列表,否则很可能没有写入任何内容,而你的新分配将是列表中唯一的,因为你的文件中还没有数据。