void suffix_strip(FILE *fp)
{
FILE *fp1;
char word[20],ch;
int len;
int i=0,j;
fp1=fopen("sstrip.txt","a+");
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!='n' && ch!=' ' && ch!=' ' && ch!='.')
{
word[i]=ch;
i++;
}
else
{
word[i]=' ';
i=0;
len=strlen(word);
if(len>3)
{
if(word[len-3]=='i' && word[len-2]=='n' && word[len-1]=='g')
{
word[len-3]=' ';
}
else if(word[len-2]=='e' && word[len-1]=='d')
{
word[len-2]=' ';
}
fputs(word,fp1);
if(count==0)
{
in[count]->freq=1;
strcpy(in[count]->word,word);
count++;
}
else
{
for(j=0;j<count;j++)
{
if(strcmp(in[j]->word,word)==0)
{
in[j]->freq++;
goto x1;
}
}
in[count]->freq=1;
strcpy(in[count]->word,word);
count++;
x1:
printf("");
}
fputc(' ',fp1);
}
else
{
fputs(word,fp1);
if(count==0)
{
in[count]->freq=1;
strcpy(in[count]->word,word);
count++;
}
else
{
for(j=0;j<count;j++)
{
if(strcmp(in[j]->word,word)==0)
{
in[j]->freq++;
goto x2;
}
}
in[count]->freq=1;
strcpy(in[count]->word,word);
count++;
x2:
printf("");
}
fputc(' ',fp1);
}
}
}
display();
}
/*
在上面的函数中,当我进入While循环检查条件
, (! feof (fp)
运行MinGW GCC的devc++ IDE抛出了一个分段错误,但是同样的代码在vc++ 6.0上运行时,代码运行成功,没有任何错误。有什么问题吗?是因为我传递文件指针作为参数吗??对于EOF的表示,GCC编译器有一些其他的约定??如果是因为参数传递,那么使用相同的参数传递方式(即传递文件指针)解决问题的正确方法可能是什么??*/
- 确保文件打开成功。也许你正在将
NULL
传递给feof()
。 - 在做I/O之前不要调用
feof()
, 只有在I/O失败时才调用 -
fgetc()
返回int
, 不返回char
。这是因为它还可以返回非字符的特殊值EOF
。
可能是word[]
溢出。如果要截断单词,请更改
word[i]=ch;
i++;
if (i < sizeof word - 1) word[i++] = ch;
.