| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2033 人关注过本帖
标题:fread读取文件乱码问题
只看楼主 加入收藏
FireRabbit
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
fread读取文件乱码问题
使用fread读取一个本地文件,该文件包含了一个链表数据。
其中COMIC是一个结构体(宏定义)、fp是文件指针,head,p_1,p_2是结构体指针。
以下为读取本地文件的函数(局部)
程序代码:
    p_1 = malloc(sizeof(COMIC));  
    p_2 = malloc(sizeof(COMIC));  
    head = p_1;
    while(!feof(fp))               
    {
        p_2->next = p_1;                   
        p_2 = p_1;                        
        fread(p_1,sizeof(COMIC),1,fp);    
        p_1 = malloc(sizeof(COMIC));   
    }
        p_2->next=NULL; 
        return head;                  
输出的结果前面部分正常,后面的节点却出现了问题。
倒数第二个节点实际上指向了 p_1 = malloc(sizeof(COMIC)) 分配的空间(猜测),然后这个空间的下一个节点才指向NULL。

要怎么样才能正确的读取一个二进制文件呢?

[ 本帖最后由 FireRabbit 于 2014-12-21 10:34 编辑 ]
搜索更多相关主题的帖子: 结构体 
2014-12-21 10:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
应该是你读文件判断结束的逻辑不对吧

授人以渔,不授人以鱼。
2014-12-21 13:14
FireRabbit
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-8-6
收藏
得分:0 
回复 2楼 TonyDeng
诚如版主所言,将条件改为:    while(fread(p_1,sizeof(COMIC),1,fp)!=0)  ,并把下面的fread(p_1,sizeof(COMIC),1,fp) 删除即正确了。

但我不明白为什么使用feof判断文件结尾的方法是错的……

[ 本帖最后由 FireRabbit 于 2014-12-21 18:31 编辑 ]

我的愿望是用C++开发自己的游戏引擎。
在此之前还有许多东西要学……
2014-12-21 18:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
feof()是在文件指针越界之后才成立的,此时你已经多读了一次。
收到的鲜花
  • FireRabbit2014-12-22 13:25 送鲜花  2朵   附言:多谢指导!

授人以渔,不授人以鱼。
2014-12-21 20:41
快速回复:fread读取文件乱码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011488 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved