c语言创建链表总结

遇到的问题是:

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超出了数组范围
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值