0
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 表現には、他のいくつかの規則がありますか??? 引数の受け渡しが原因である場合、同じ方法のパラメーター受け渡し(つまり、ファイルポインターの受け渡し)を使用して解決する正しい方法は何ですか?? */

4

2 に答える 2

1
  1. ファイルが正常に開くことを確認します。おそらくあなたは に渡っNULLていfeof()ます。
  2. feof()I/O を実行する前に呼び出さないでください。I /O が失敗した場合にのみ呼び出してください。
  3. fgetc()intではなくを返しますcharEOFこれは、文字ではない特別な値を返すこともできるためです。
于 2013-01-09T14:45:49.910 に答える
0

おそらくword[]オーバーフローします。単語を切り捨てたい場合は、変更します

            word[i]=ch;
            i++;

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

.

于 2014-05-12T09:42:14.943 に答える