c语言创建链表总结
2015-05-18 21:28
239 查看
遇到的问题是:
int readrule(char rulepath[],struct rule *head)
{
char buf[100];
FILE *fp;
int n=0;
struct rule *p1,*p2;
p1=(struct rule *)malloc(sizeof(struct rule));
if( (fp=fopen(rulepath,"r"))==NULL)
return(n);
while(fgets(buf,100,fp)!=NULL)
{
n++;
if(n == 1)
{
head->next = p1;
sscanf(buf,"%[^,],%[^,],%[^\r\n]",p1->file,p1->host,p1->dir);
}
else
p2->next=p1;
p2=p1;
p1=(struct rule *)malloc(sizeof(struct rule));
sscanf(buf,"%[^,],%[^,],%[^\r\n]",p1->file,p1->host,p1->dir);
memset(buf,0,sizeof(buf));
}
fclose(fp);
p2->next=p1;
p1->next=NULL;
return(n);
}
两段相同的这样代码,运行一个没问题,运行两个就报错。后来发现是sscanf(buf,"%[^,],%[^,],%[^\r\n]",p1->file,p1->host,p1->dir)这里读入数据使p1->dir超出了数组范围
int readrule(char rulepath[],struct rule *head)
{
char buf[100];
FILE *fp;
int n=0;
struct rule *p1,*p2;
p1=(struct rule *)malloc(sizeof(struct rule));
if( (fp=fopen(rulepath,"r"))==NULL)
return(n);
while(fgets(buf,100,fp)!=NULL)
{
n++;
if(n == 1)
{
head->next = p1;
sscanf(buf,"%[^,],%[^,],%[^\r\n]",p1->file,p1->host,p1->dir);
}
else
p2->next=p1;
p2=p1;
p1=(struct rule *)malloc(sizeof(struct rule));
sscanf(buf,"%[^,],%[^,],%[^\r\n]",p1->file,p1->host,p1->dir);
memset(buf,0,sizeof(buf));
}
fclose(fp);
p2->next=p1;
p1->next=NULL;
return(n);
}
两段相同的这样代码,运行一个没问题,运行两个就报错。后来发现是sscanf(buf,"%[^,],%[^,],%[^\r\n]",p1->file,p1->host,p1->dir)这里读入数据使p1->dir超出了数组范围
相关文章推荐
- 单向链表之创建添加(C语言实现)
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- C语言中,链表的创建、输入、输出、链接。
- C语言 链表的创建--打印--逆置--新增--删除--排序--释放
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作
- 用c语言创建双向环形链表
- c语言链表的创建、插入、删除、排序
- C语言链表的创建,排序和合并
- (单向链表)数据结构的创建和功能函数(C语言)
- C语言各种链表操作(创建、打印、删除、插入、反转)
- C语言链表创建的电子通讯录V1.0
- c语言实现链表的创建、增、删、改、查
- C语言中,链表的创建,插入,删除,遍历,求链表长度,排序等
- C语言创建链表malloc的使用(C的创建对象)
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- C语言链表在笔试面试中常考问题总结
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- C语言链表的创建与排序
- 一个链表创建、反转、打印的C语言代码
- linux 下c语言创建单向动态链表的理解