把结构体内容保存到文件中,乱码了
时间:2010-07-20
来源:互联网
就是一段很简单的代码,把结构体 first 的内容通过文件 temp 复制到 second,可是复制之后发现是乱码,好像根本就没有复制成功,不太明白是怎么回事,有劳诸位指点一下。

- #include <stdio.h>
- #include <stdlib.h>
- #include <strings.h>
-
- typedef struct node {
- int x;
- double y;
- char ch;
- } Node;
-
- int main(void)
- {
-
- Node first;
- Node second;
- FILE * in;
-
- first.x = 10;
- first.y = 0.1;
- first.ch = 'a';
-
- if ((in = fopen("temp", "rw")) == NULL) {
- perror("Memory allocate!\n");
- exit(EXIT_FAILURE);
- }
- fwrite(&first, sizeof(Node), 1, in);
- fread(&second, sizeof(Node), 1, in);
- printf("%d %f %c\n", second.x, second.y, second.ch);
-
- fclose(in);
-
- return 0;
- }
作者: ChiyuT 发布时间: 2010-07-20

作者: duanjigang 发布时间: 2010-07-20
fread前要fseek到文件头
作者: hellioncu 发布时间: 2010-07-20
duanjigang 发表于 2010-07-20 10:13
不明白了

作者: ChiyuT 发布时间: 2010-07-20
ChiyuT 发表于 2010-07-20 10:27
可以啊,写入,读取都可以,但是写入二进制的显示出来本来就是乱码。
你只是把内存中的数据拷贝出来写入文件,编辑器又不会给你智能提取结构体的成员并显示,呵呵
作者: duanjigang 发布时间: 2010-07-20
fread前要fseek到文件头
hellioncu 发表于 2010-07-20 10:15
多谢指教! fseek是我不小心忽略了,惭愧。

刚才改为“w+b”模式果然就不乱码了。


作者: ChiyuT 发布时间: 2010-07-20
刚才改为“w+b”模式果然就不乱码了。:mrgree ...
ChiyuT 发表于 2010-07-20 10:34
关键是没有“rw”这种模式
作者: hellioncu 发布时间: 2010-07-20
你只是把内存中的数据拷贝 ...
duanjigang 发表于 2010-07-20 10:31
惭愧,一直以为linux下是否带b是没有影响的……

作者: ChiyuT 发布时间: 2010-07-20
hellioncu 发表于 2010-07-20 10:36

作者: ChiyuT 发布时间: 2010-07-20
ChiyuT 发表于 2010-07-20 10:37
你这里不是b的问题,是“rw”的问题,用“w+”同样应该可以
作者: hellioncu 发布时间: 2010-07-20
hellioncu 发表于 2010-07-20 10:40
是的,刚才已经试过了,确实是模式弄错了。

作者: ChiyuT 发布时间: 2010-07-20
ChiyuT 发表于 2010-07-20 10:37
我错误理解你的问题了,呵呵
一般不是一行一行读的,我都直接用系统io, open read 和write,二进制方便。
作者: duanjigang 发布时间: 2010-07-20
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28