我正在创建链接列表,然后将其写入文件并再次读取。我正在使用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个小时。我可以通过单独存储结构元素来实现,但这次想以不同的方式进行。
对于所有重要人物,这是一个家庭作业问题。
非常感谢任何帮助。谢谢:))
答案 0 :(得分:1)
首先,
close(ifd);
不正确,因为它不是描述符,而是FILE*
。使用:
fclose(ifd);
由于你没有刷新,除非它是一个相当大的列表,否则很可能没有写入任何内容,而你的新分配将是列表中唯一的,因为你的文件中还没有数据。