feof(文件*)内置函数中的分段错误 void后缀\u条(文件*fp) { 文件*fp1; 字符字[20],ch; 内伦; int i=0,j; fp1=fopen(“sstrip.txt”,“a+”); 而(!feof(fp)) { ch=fgetc(fp); 如果(ch!='\n'&&ch!='\0'&&ch!='&&ch!='&&ch!='.')) { 字[i]=ch; i++; } 其他的 { 字[i]='\0'; i=0; len=strlen(单词); 如果(len>3) { 如果(单词[len-3]='i'和单词[len-2]='n'和单词[len-1]='g') { 字[len-3]='\0'; } else if(单词[len-2]=“e”&&word[len-1]=“d”) { 字[len-2]='\0'; } fputs(word,fp1); 如果(计数=0) { in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; } 其他的 { 对于(j=0;jword,word)==0) { in[j]>freq++; 转到x1; } } in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; x1: printf(“”); } fputc(“”,fp1); } 其他的 { fputs(word,fp1); 如果(计数=0) { in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; } 其他的 { 对于(j=0;jword,word)==0) { in[j]>freq++; 后藤x2; } } in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; x2: printf(“”); } fputc(“”,fp1); } } } 显示();
} /* 在上面的函数中,当我进入While循环检查条件时 而(!feof(fp)) 运行MinGW-GCC的DevC++IDE抛出了一个分段错误,但是在VC++6.0上运行的代码是相同的。代码成功运行,没有任何错误。 有什么问题吗??? 是因为我将文件指针作为参数传递吗??? 对于EOF表示,GCC编译器的其他一些约定是什么??? 如果是因为参数的传递,那么使用相同的参数传递方式(即传递文件指针)解决它的正确方法是什么?? */feof(文件*)内置函数中的分段错误 void后缀\u条(文件*fp) { 文件*fp1; 字符字[20],ch; 内伦; int i=0,j; fp1=fopen(“sstrip.txt”,“a+”); 而(!feof(fp)) { ch=fgetc(fp); 如果(ch!='\n'&&ch!='\0'&&ch!='&&ch!='&&ch!='.')) { 字[i]=ch; i++; } 其他的 { 字[i]='\0'; i=0; len=strlen(单词); 如果(len>3) { 如果(单词[len-3]='i'和单词[len-2]='n'和单词[len-1]='g') { 字[len-3]='\0'; } else if(单词[len-2]=“e”&&word[len-1]=“d”) { 字[len-2]='\0'; } fputs(word,fp1); 如果(计数=0) { in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; } 其他的 { 对于(j=0;jword,word)==0) { in[j]>freq++; 转到x1; } } in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; x1: printf(“”); } fputc(“”,fp1); } 其他的 { fputs(word,fp1); 如果(计数=0) { in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; } 其他的 { 对于(j=0;jword,word)==0) { in[j]>freq++; 后藤x2; } } in[count]>freq=1; strcpy(在[count]->word中,word); 计数++; x2: printf(“”); } fputc(“”,fp1); } } } 显示();,c,pointers,gcc,segmentation-fault,file-pointer,C,Pointers,Gcc,Segmentation Fault,File Pointer,} /* 在上面的函数中,当我进入While循环检查条件时 而(!feof(fp)) 运行MinGW-GCC的DevC++IDE抛出了一个分段错误,但是在VC++6.0上运行的代码是相同的。代码成功运行,没有任何错误。 有什么问题吗??? 是因为我将文件指针作为参数传递吗??? 对于EOF表示,GCC编译器的其他一些约定是什么??? 如果是因为参数的传递,那么使用相同的参数传递方式(即传递文件指针)解决它的正确方法是什么?? */ 确保文件打开成功。可能您正在将NULL传递给feof() 在执行
NULL
传递给feof()
fgetc()
返回一个int
,而不是char
。这是因为它还可以返回非字符的特殊值EOF
可能
word[]
溢出。如果要截断单词,请更改
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();
到
if(i
.Dev-C++已经非常过时了。我建议您在Windows上切换到MSVC(它是免费的),或者如果您真的想使用MinGW,请学习使用命令行界面(即MSYS)和简单编辑器(升华文本?)来编写代码(不过,请查看代码块以获得替代IDE)。删除
while()
循环中除ch=fgetc(fp)之外的任何内容
并查看问题是否仍然存在。我打赌您超出了一些数组边界,这会弄乱堆栈(包括FILE*fp
参数)。
word[i]=ch;
i++;
if (i < sizeof word - 1) word[i++] = ch;