交叉链表二进制保存问题
这阵子在做链表的保存和读取,二进制fwrite和fread,两个函数代码如下
程序代码:void savedata(urban *head){
FILE *out1,*out2,*out3;
char ch[100];
urban *p1= head;
tree *p2= NULL;
tree_i *p3= NULL;
//printf("choose a directory.\n");
//scanf("%s",ch);
if((out1=fopen("c:\\resource1.dat","wb"))== NULL)
exit(-1);
if((out2=fopen("c:\\resource2.dat","wb"))== NULL)
exit(-1);
if((out3=fopen("c:\\resource3.dat","wb"))== NULL)
exit(-1);
while(p1!=NULL){
fwrite(p1,sizeof(urban),1,out1);
p2=p1->head;
while(p2!=NULL){
fwrite(p2,sizeof(tree),1,out2);
p3 = p2->head;
while(p3!=NULL){
fwrite(p3,sizeof(tree_i),1,out3);
p3 = p3->next;
}
p2 = p2->next;
}
p1 = p1->next;
}
fclose(out1);
fclose(out2);
fclose(out3);
}
void loaddata(urban **head){
FILE *in1,*in2,*in3;
urban *hp1 = NULL, *p1;
tree *hp2 = NULL, *p2;
tree_i *hp3=NULL, *p3;
if((in1 = fopen("c:\\resource1.dat","rb"))==NULL)
exit(-1);
if((in2 = fopen("c:\\resource2.dat","rb"))==NULL)
exit(-1);
while(!feof(in1)){
p1=(urban *)malloc(sizeof(urban));
fread(p1,sizeof(urban),1,in1);
if(!feof(in1)){
p1->head =NULL;
p1->next =hp1;
hp1 = p1;
}
}
(*head)=p1;
while(!feof(in2)){
p2 = (tree *)malloc(sizeof(tree));
fread(p2,sizeof(tree),1,in2);
if(!feof(in2)){
p1 = (*head);
while(p1!=NULL){
if(!strcmp(p1->ar_num,p2->ar_num)){
p2->next = p1->head;
p1->head = p2;
if((in3 = fopen("c:\\resource3.dat","rb"))==NULL)
exit(-1);
while(!feof(in3)){
p3=(tree_i *)malloc(sizeof(tree_i));
fread(p3,sizeof(tree_i),1,in3);
if(!feof(in3)){
if(!strcmp(p2->tree_num,p3->tree_num)){
p3->next =hp3;
hp3 = p3;
}
else free(p3);
}
}
fclose(in3);
p2->head = p3;
break;
}
else p1=p1->next;
}
}
}
fclose(in1);
fclose(in2);
}附上我3个自定义结构,
程序代码:typedef struct urban_basic
{
char ar_num[7];
char ar_name[20];
char dep[30];
char add[30];
char tel[13];
char manager[20];
struct urban_basic *next;
struct tree_info *head;
}urban;
typedef struct tree_info
{
char ar_num[7];
char tree_num[5];
char name[20];
char sci_name[20];
char ctl[20];
int age;
char con_time[11];
char level;
char add[30];
struct tree_info *next;
struct tree_basic *head;
}tree;
typedef struct tree_basic
{
char ar_num[7];
char tree_num[5];
char ppl[20];
char date[11];
char method[30];
char health[20];
struct tree_basic *next;
}tree_i;2个函数里面,可能我比较菜,看不出什么逻辑的错误。运行的时候,到链表读取就崩溃了,debug时,发现对主链读取存在错误,估计save那里也有问题。
请各位大大不吝赐教。
[ 本帖最后由 nnak7h6j 于 2010-10-9 00:40 编辑 ]






