C语言怎样从/向数据⽂件读/写结构?

一、问题

        从数据⽂件读结构或者向数据⽂件写结构,都可以很轻松地使⽤⽂件读写函数实现, 如使⽤ fwrite( ) 函数写⼀个结构,使⽤ fread( ) 函数读⼀个结构,但是这样读写出的⽂件却不能移植。怎么从/向数据⽂件读/写结构才能更好呢?

二、解答

        使⽤ fread( ) 和 fwite( ) 函数读写数据⽂件很常见,⽤来读写⼀个数据块,它们的⼀般形式为:

fread(buffer,size,count,fp); 
fwrite(buffer,size,count,fp);

        buffer 是⼀个指针,对 fread( ) 函数来说是指向读⼊数据存放的地址,对 fwrite( ) 来说是指向要输出数据的地址;size 为要读写的字节数;count 为多少个 size 字节的数据项:fp为⽂件指针。

说明:

        如果⽂件以⼆进制形式打开,⽤以上这两个函数就可以读写任何类型的信息。 举例说明从数据⽂件读结构。

        例如,有⼀个⾃定义的结构体类型 student 为:

struct student
{
char name[20]; 
int age; 
int number;
}stu[10];

        结构体数组 stu 有 10 个元素,每⼀元素⽤来存放⼀个学⽣的数据(包括姓名、年龄、学号)。10 名学⽣的信息已经存储到指定的磁盘⽂件中,可以使⽤ fread( ) 函数读此结构信息。例如:

for(i = 0;i < 10;i++)

fread(&stu[i],sizeof(struct student),1,fp);

说明:

        fwrite( ) 函数应⽤同样的⽅法可以向磁盘⽂件写⼊信息。

        虽然应⽤上述函数可以向数据⽂件读写结构,但是这样写出的⽂件不能移植。最好的移植⽅法是⽤⽂本⽂件,使⽤ fprintf( ) 函数写⼊,使⽤ fscanf( ) 函数读⼊,或类似的函数。

        同时还应注意,如果结构包含任何指针,则只有指针值会被写⼊⽂件,当它们再次读回来的时候,很可能⼰经失效。最后为了⼴泛地移植,必须使⽤ “ b ” 标志打开⽂件。 移植性更好的⽅案是写⼀对函数,⽤可移植的⽅式按域读写结构,不过开始可能⼯作量稍⼤。

三、总结

        在从数据⽂件读结构或者向数据⽂件写结构时,都应注意所使⽤的函数是应⽤于⼆进制⽂件还是⽂本⽂件,按照要求以相应的打开⽅式打开⽂件,否则容易出现乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code repairman

你的鼓励将是我创作的最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值