Sahil
Sahil

Reputation: 69

fread not working while reading structure dynamically from a file

I am creating a linked list then writing it to a file and reading it again. I am using fwrite and fread to write and read a whole instance of a structure at a time. But the problem is it is not working correctly. I suppose writing is working fine after seeing the output file but still not sure about it. But reading is not working at all.

Below is structure

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

Below is logic

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);

Although I am only reading a single instance for the time being, it is still not working. Nothing gets stored in the temp->name and 0 gets stored in temp->roll_num. I am stuck on it for last 4 hours. I can do it by storing elements of structure individually but wanted to do by a different way this time.

And for all those for whom it matters, this is a homework question.

Any help would be greatly appreciated. Thanks :)

Upvotes: 1

Views: 813

Answers (1)

WhozCraig
WhozCraig

Reputation: 66204

For starters,

close(ifd); 

is not correct, since it isn't a descriptor, its a FILE*. Use:

fclose(ifd);

Since you're not flushing, unless it is a sizable list chances are nothing is written yet and you're new allocation will be the only one in the list since you have no data in your file yet.

Upvotes: 1

Related Questions