HardBirch

c 语言中fread()函数使用时应该注意的地方

时间:09-09-12 栏目:安卓学习笔记 作者:张飞不张,文采横飞 评论:1 点击: 1,665 次

用c语言做了个通讯录,系统一运行时便将数据文件加载进内存,并用链表存储。退出系统时,自动将链表中的所有节点再存入文件。

可是现在,每次退出系统,文件里都会比链表多存储一条记录。
如:现在只有两条记录,退出后在启动时一查询,就会多一条乱记录(系统自己加的)。

 

加载文件的部分代码如下:
/*判断文件是否为空*/
    fseek(groupfp,0,2);/*指针指向group.dat文件尾部*/
    fseek(linkmanfp,0,2);/*指针指向linkman.dat文件尾部*/
    if(ftell(groupfp)>0){ /*文件非空*/
    rewind(groupfp);/*文件指针重新指向文件开始处*/
    /*下面要装载该文件到group链表中*/
    while(!feof(groupfp)){
            p=(GroupNote)malloc(sizeof(struct groupnote));
            fread(p,sizeof(struct groupnote),1,groupfp);
            p->next=NULL;/*刚读取进来的指针是上一次的,所以重新赋值为空*/
            gn->next=p;
    gn=p;/*尾插法*/
    /*注意:p->next上面已经赋值为空了,所以这里不需要再次赋值了*/
    group.length++; /*链表长度加1*/
    }/*while*/
    group.tail=gn;/*将尾指针指向group链表的结尾*/

 


fread(p,sizeof(struct groupnote),1,groupfp);
改成
if (fread(p,sizeof(struct groupnote),1,groupfp) != 1) {
    free(p);
    break;
}

这是因为有些库函数的写法,是在fread失败之后才设文件终结符的,这样在最后一个数据读完后还会再执行一次循环.

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: c 语言中fread()函数使用时应该注意的地方

c 语言中fread()函数使用时应该注意的地方:目前有1 条留言

  1. 沙发
    tanyuanquan:

    [e06]

    2010-01-21 15:20 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐