fwrite函数与fread 我每次用fwrite写数据 再fread读数据 但输出数据后面都会跟乱码,是怎么回事

写数据:while(p1!=NULL){fwrite(p1,sizeof(structBook),1,fp);p1=p1->next;}读数据:while(1){if(f... 写数据:
while(p1!=NULL)
{
fwrite(p1,sizeof(struct Book),1,fp);
p1=p1->next;
}
读数据:
while(1)
{
if(feof(fp)){

break;
}
p0=(struct Book*)malloc(sizeof(struct Book));
fread(p0,sizeof(struct Book),1,fp);

Insert(p0); //将结构体插入到链表中,无问题
}
展开
 我来答
bingVLuo
推荐于2018-05-07 · 超过13用户采纳过TA的回答
知道答主
回答量:30
采纳率:100%
帮助的人:6.3万
展开全部
大哥,你的buffer没有预先清空重置就会这样的,
你试试这样定义
char in_read[256]="\0", out_write[256]="\0";
或者每次读数据的之前手动把你的buffer清空为全0x0然后再fread读入数据,这样:
memset(in_read,256,0x0);
同样,每次需要设置写入的数据之前先把写入的buffer清空一下。然后再拷贝写入的数据

memset(out_write,256,0x0);
memcpy(out_write, my_write_data, 256);

我保证你再输出不会有乱码了,望采纳。
中天明日照当时5235
推荐于2016-09-15 · TA获得超过7.8万个赞
知道大有可为答主
回答量:3.2万
采纳率:0%
帮助的人:2164万
展开全部
fwrite后,需将文件关掉重开,或者用fseek 重新定位到文件头,不然,默认是重fwrite后面读取数据
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
归悦欣cf
2012-06-04 · TA获得超过1444个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1327万
展开全部
文件第一次打开时候,读写指针会在起始位置,你这里写入后读写指针已经变了,可是你在读的时候并没有把文件读写指针移到起始位置。
更多追问追答
追问
读的时候怎么移到起始位置呢?
追答
有相应的函数的,你去查一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lt199025
2012-06-03 · TA获得超过122个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:122万
展开全部
这个我也碰到过,可能是因为你打开的时候没有用二进制打开,
fp=fopen("filename", "rb");
还有可能是因为写的字节数的原因
追问
读写字节数都是book类大小啊
追答
关键是里面的内容,有可能结构的大小与实际所存储的大小不同。
还有,有可能文件的编码的不同,比如说utf-8,unicode等
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式