我写的一个饭卡管理系统为什么当我修改完文件时,文件末尾会出现乱码?

这是部分代码

/*************遍历获得头指针*************/
struct card *travel()
{
    FILE *fp;
    struct card *link,*p,*m;
    p=NULL;
    m=p;
    if((fp=fopen("d:\\card.dat","r"))==NULL)
        {
            printf("打开文件失败");
            return 0;
        }
        while(!feof(fp))
        {
            link=(struct card *)malloc(sizeof(struct card));
            fscanf(fp,"%d %s %f %d",&(link->num),&(link->name),&(link->money),&(link->loss));
            if(p==NULL)
                p=link;
            else
                m->next=link;
            link->next=NULL;
            m=link;

        }
       fclose(fp);
       return p;
}

/**********把数据写入文件的函数*************/

void Print_nc_Doc(struct card*head)
{
    struct card *ptr;
    FILE *fp;

    ptr=(struct card*)malloc(sizeof(struct card));
    ptr=head;
    if((fp=fopen("d:\\card.dat","w"))==NULL){
        printf("建立饭卡文件失败\n");
        exit(0);
    }
    while(ptr!=NULL){
        fprintf(fp,"%d %s %f %d\n",ptr->num,ptr->name,ptr->money,ptr->loss);
        ptr=ptr->next;
    }
    fclose(fp);
}
修改完后的文件
 1 a 100.000000 0
2949316 ?- 0.000000 0
下面第二行是乱码,100是123修改后的数据。
阅读 2.5k
1 个回答

可能是你的链表的末尾next指针没有置NULL,导致ptr=ptr->next的时候取到了野指针,然后fprintf打印了4个乱码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进