【发布时间】:2013-01-09 14:23:10
【问题描述】:
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!='\0' && ch!=' ' && ch!='.')
{
word[i]=ch;
i++;
}
else
{
word[i]='\0';
i=0;
len=strlen(word);
if(len>3)
{
if(word[len-3]=='i' && word[len-2]=='n' && word[len-1]=='g')
{
word[len-3]='\0';
}
else if(word[len-2]=='e' && word[len-1]=='d')
{
word[len-2]='\0';
}
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 循环检查条件时
while(!feof(fp))
运行 MinGW GCC 的 DevC++ IDE 会引发分段错误,但在 VC++ 6.0 上运行相同的代码时,代码运行成功,没有任何错误。 可能是什么问题??? 是因为我将文件指针作为参数传递吗??? GCC 编译器的 EOF 表示还有一些其他约定??? 如果是因为参数传递,那么使用相同的参数传递方式(即传递文件指针)解决它的正确方法是什么? */
【问题讨论】:
-
Dev-C++ 已经过时了。我建议在 Windows 上切换到 MSVC(它是免费的),或者如果您真的想使用 MinGW,请学习使用命令行界面(即 MSYS)和简单的编辑器(崇高文本?)来编写代码(查看 CodeBlocks但是,替代 IDE)。
-
删除
while()循环中除ch=fgetc(fp);之外的所有内容,然后查看问题是否仍然存在。我敢打赌,你超出了一些数组边界,这会弄乱你的堆栈(包括FILE *fp参数)。
标签: c pointers gcc segmentation-fault file-pointer