这是部分代码
/*************遍历获得头指针*************/
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修改后的数据。
可能是你的链表的末尾next指针没有置NULL,导致ptr=ptr->next的时候取到了野指针,然后fprintf打印了4个乱码。