从文件中查找字符串程序出错
废话不说,要求如标题:
#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)) 可能减出负数,就死了。