日期:2014-05-16  浏览次数:20766 次

从文件中查找字符串程序出错
废话不说,要求如标题:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#define MAXLINE 1024;

int linesNum;
static int sunday(const char* src, const char* des)
{
int len_s=strlen(src);
int len_d=strlen(des);
int next[26]={0};
int i,j;
for(i=0;i<26;++i)
next[i]=len_d+1;
for(j=0;j<len_d;++j)
next[des[j]-'a']=len_d-j;
int pos=0;
while(pos<(len_s-len_d+1))
{
int i=pos;
int j;
for(j=0;j<len_d;++j,++i)
 {
if(src[i]!=des[j])
{
pos+=next[src[pos+len_d]-'a'];
break;
}
}
if(j==len_d)
return pos;
}
return-1;
}

int main(void)  
{  
 FILE * fp;  
 char *line = NULL;
 //char line[100];  
 size_t len = 0;  
 ssize_t read;
 int end=0;  

     fp = fopen("files", "r");
     while((fgets(line,1024,fp))!=NULL){   
linesNum++;
//end=strlen(line)-1;
//line[end]=0;
printf("%d\n",linesNum);
puts(line);
if(sunday(line,"lianghui")>=0)
printf("find match line at:%d\n",linesNum);
      }   
   fclose(fp);   
}
运行出错:
Segmentation fault,求大神指导我该怎样做,先谢谢了

------解决方案--------------------
不知道你代码要干什么,写的是什么东西
至少有这几个地方会死
 while((fgets(line,1024,fp))!=NULL){   没有检查fp,为NULL就是了
next[des[j]-'a']=len_d-j; 可能越界,就死了
while(pos<(len_s-len_d+1))  可能减出负数,就死了。