c语言保存链表后再打开没有,c语言链表问题: 链表创建,写入文件都没问题,问题是怎么把文件恢复成链表,t_Link *FileToLink(){???}...

匿名用户

1级

2017-11-09 回答

t_Link *FileRead()

{

FILE *fp;

int ret;

int filesize;

t_Link *phead;

t_Link *p;

ret = 0;

filesize = 0;

phead = NULL;

p = NULL;

fp = fopen("./link.txt", "r");

if(NULL == fp)//打开文件保护

{

perror("open error! \n");

fclose(fp);

return phead;

}

fseek(fp, 0, SEEK_END);

filesize = ftell(fp);

fclose(fp);

if(filesize == 0)//判断是否为空文件

{

return phead;

}

else

{

fp=fopen("./link.txt","r");

p=(t_Link *)malloc(sizeof(t_Link));//重新读出节点再链接成一条完整链表

ret=fread(p, sizeof(t_Link), 1, fp);

if(ret==0)

{

fclose(fp);

perror("read error\n");

return NULL;

}

if(p->next==NULL)//如果只有一个节点,return返回

{

phead=p;

fclose(fp);

return phead;

}

p->next=NULL;

phead=p;

while(1)

{

p=(t_Link *)malloc(sizeof(t_Link));

ret=fread(p, sizeof(t_Link), 1, fp);

if(ret==0)//如果读文件失败,退出系统

{

fclose(fp);

perror("read error\n");

return NULL;

}

if((p->next)==NULL)//如果是最后一个节点,循环终止

{

p->next=phead;

phead=p;

break;

}

p->next=phead;

phead=p;

}

fclose(fp);

}

return phead;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值