在fof (FILE *)内建函数中出现分段错误


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编译器有一些其他的约定??如果是因为参数传递,那么使用相同的参数传递方式(即传递文件指针)解决问题的正确方法可能是什么??*/

  1. 确保文件打开成功。也许你正在将NULL传递给feof()
  2. 在做I/O之前不要调用feof()只有在I/O失败时才调用
  3. fgetc()返回int不返回 char。这是因为它还可以返回非字符的特殊值EOF

可能是word[]溢出。如果要截断单词,请更改

            word[i]=ch;
            i++;

            if (i < sizeof word - 1) word[i++] = ch;

.

最新更新