用fread和fwrite函数读写结构体数据,把数据写入文件时,只有汉字部分输出正确,数字部分全市乱码,读取数据时,数字部分显示的好像是内存地址。请高手指点,急求,谢谢。#include<stdio.h>#include<stdlib.h>struct time{int year;int mon;int day;int hour;int min;float sec;};void main(){struct time tim[8];int i;for(i=0; i<8; i++){tim[i].year = 2000;tim[i].mon = 1;tim[i].day = 1;tim[i].hour = 0;tim[i].min = 0;tim[i].sec = 0.0;}FILE *fp;fp = fopen("E:\\C程序\\1.txt","wb");if(fp==NULL){printf("file open error!\n");exit(0);}else{for(i=0; i<8; i++){fwrite(&tim[i],sizeof(struct time),1,fp);printf("%d %d %d %d %d %4.2f\n",tim[i].year,tim[i].mon,tim[i].day,tim[i].hour,tim[i].min,tim[i].sec);}}fclose(fp);}
2 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
你写入文件时取的是地址,还是地址的地址,别搞错了,要么指针,千万别又对指针取地址了。那样存取的就是地址了。fread,则是读的时候一样,都要注意这个问题
哈士奇WWW
TA贡献1799条经验 获得超6个赞
不知你是如何输出的?
用fwrite()写入文件的值,如果用fread()来读取是可以取回原始的内容的,但是如果用fwrite()写入这个txt文件是为了用“记事本”等文本处理软件打开来阅读,那么一定会有乱码的情况。因为二进制的读写会直接将数值原样写入文件,不会进行ASCII码的转换,而文本都是需要经过ASCII码转换的。
如果是为了打开TXT文件进行阅读,应该使用fprintf()/fscanf()等函数进行读写。
- 2 回答
- 0 关注
- 229 浏览
添加回答
举报
0/150
提交
取消