Информационные технологии

ошибка сегментации в функции feof (FILE *) inbuilt

void suffix_strip(FILE *fp)
{
    FILE *fp1;
    char word[20],ch;
    int len;
    int i=0,j;
    fp1=fopen("sstrip.txt","a+");
    в то время как (! 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;jword,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;jword,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))

IDE DevC ++, работающая под управлением MinGW GCC, выдает ошибку сегментации, но тот же код при запуске на VC ++ 6.0 код успешно запускается без каких-либо ошибок. что может быть проблемой ??? это потому, что я передаю указатель файла в качестве аргумента ??? компилятора GCC имеет некоторые другие соглашения для представления EOF ??? если это из-за передачи аргумента, то какой может быть правильный способ его решения, используя тот же способ передачи параметров (например, передача указателя файла)? * /

0
nl ja de
Dev-C ++ невероятно устарел. Я бы рекомендовал переключиться на MSVC в Windows (это бесплатно), или если вы действительно хотите использовать MinGW, научитесь использовать интерфейс командной строки (то есть MSYS) и простой редактор (возвышенный текст?) Для написания кода (посмотрите на CodeBlocks для альтернативная IDE, однако).
добавлено автор RageD, источник
Имеет ли fp! = NULL ?
добавлено автор hmjd, источник
Удалите что-либо из цикла while() , за исключением ch = fgetc (fp); , и проверьте, не осталась ли проблема. Бьюсь об заклад, вы превысите границы массива, которые испортили ваш стек (включая аргумент FILE * fp ).
добавлено автор Andreas Fester, источник

2 ответы

  1. Make sure the file open succeeds. Perhaps you're passing NULL to feof().
  2. Don't call feof() before doing I/O, only call it once I/O has failed.
  3. fgetc() returns an int, not a char. This is because it can also return the special value EOF which is not a character.
1
добавлено

Возможно переполнение word [] , Если вы хотите усечь слова, измените

            word[i]=ch;
            i++;

в

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

,

0
добавлено