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

用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);
}

Cats萌萌
浏览 235回答 2
2回答

慕丝7291255

你写入文件时取的是地址,还是地址的地址,别搞错了,要么指针,千万别又对指针取地址了。那样存取的就是地址了。fread,则是读的时候一样,都要注意这个问题

哈士奇WWW

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