请教个C的文件读写问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:19:03
代码太长,只贴有问题部分
void pm(struct ab *kj)/*kj有头结点/*
{
FILE*p;
p=fopen("f:\\rrr.bin","wb");
if(p==NULL)
{
printf("文件创建失败\n");
return;
}
else
{
while(kj!='\0')
{
fwrite(kj,sizeof(struct ab),1,p);
fseek(p,sizeof(struct ab),1);
kj=kj->p;
}
fclose(p);
printf("保存成功\n");
}
}
void pn()
{
struct ab *k,*o,*m,*l;
FILE*p;
l=k=(struct ab *)malloc(sizeof(struct ab));
o=(struct ab *)ma

1

1,空指针是NULL,用'\0'是不严谨的;
2,两个函数里面的fseek都是多余的东西;不用它文件指针默认也是顺序移动的;
3,pn函数没有将申请的链表返回供别的函数释放,也没有自己释放,这个习惯不好;
4,pn里面弄了一个多余的头节点。变量名起得很没意义。
5,我试着改了pn函数,你需要去掉pm当中的fseek。

void pn()
{
struct ab *head, *tail,*node;
FILE*p;
head=tail=NULL;
p=fopen("f:\\rrr.bin","rb");
while(!feof(p)){
node=(struct ab *)malloc(sizeof(struct ab));
node->p=NULL;
fread(node,sizeof(struct ab),1,p);
if (tail!=NULL)
{
tail->p = node;
tail = node ;
} else {
head = node ;
tail = node ;
}
}
pi(head);/*查看涵数/*
fclose(p);
}

#include "stdio.h"
#include <malloc.h>
#include <memory.h>
struct ab{
char h[5];
int mun;
struct ab *p;
};
void pm(struct ab *kj)/