为了账号安全,请及时绑定邮箱和手机立即绑定

麻烦帮忙解释一下,关于fread和fwrite函数使用中的一个问题

麻烦帮忙解释一下,关于fread和fwrite函数使用中的一个问题

C++ C
Cats萌萌 2021-10-20 15:15:52
用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,则是读的时候一样,都要注意这个问题

查看完整回答
反对 回复 2021-10-24
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

不知你是如何输出的?
用fwrite()写入文件的值,如果用fread()来读取是可以取回原始的内容的,但是如果用fwrite()写入这个txt文件是为了用“记事本”等文本处理软件打开来阅读,那么一定会有乱码的情况。因为二进制的读写会直接将数值原样写入文件,不会进行ASCII码的转换,而文本都是需要经过ASCII码转换的。
如果是为了打开TXT文件进行阅读,应该使用fprintf()/fscanf()等函数进行读写。

查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信