← 返回文章流

C语言下的二进制文件IO踩坑

C语言下的二进制文件读写有个坑,就是一定要按存储的顺序读取。例: typedef struct player { int id; double XP; double MP; }player; 这里有一个玩家的数据结构,我们创建变量并初始化。 int b_i[32] = {1, 233, 2453, 5432, 21 ,43 ,297, 752, 643}; player yingyu5658; yingyu5658.MP = 100; yingyu5658.XP = 100; yingyu5658.id = 114514; 对文件进行存储时,按照MP=>XP=>ID的顺序存储 pd = fopen("./data", "wb"); fwrite(&yingyu5658.MP, sizeof(double), 1, pd); fwrite(&yingyu5658.XP, sizeof(double), 1, pd); fwrite(&yingyu5658.id, sizeof(int), 1, pd); 读取的时候一定要按照这个顺序,否则读取出来的内容是无效的。 int id; double XP, MP; pd = fopen("./data", "rb"); fread(&MP, sizeof(double), 1, pd); fread(&XP, sizeof(double), 1, pd); fread(&id, sizeof(int), 1, pd); player new_player; new_player.id = id; new_player.XP = XP; new_player.MP = MP; printf("id: %d\n", new_player.id); printf("XP: %f\n", new_player.XP); printf("MP: %f\n", new_player.MP); 运行结果: 写入了id: 114514 写入了XP: 100.000000 写入了MP: 100.000000 id: 114514 XP: 100.000000 MP: 100.000000 使用完也要关闭流,否则资源泄漏 fclose(pd); // 必须显式关闭

来自 映屿作者主页
在原博客阅读全文 (新标签页打开)

以上内容来自博客订阅源,版权归原作者。关注作者后可以在 关注列表 第一时间查看作者文章。

一起聊聊 0

尊重不同观点

还没有评论。欢迎分享第一个想法。

RSS SUBSCRIPTIONS

选择 RSS 订阅

把博客汇的文章添加到你常用的阅读器。

关注文章 RSS 订阅本订阅需要登录后使用