Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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); } } } 显示();

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() 在执行

}

/*

在上面的函数中,当我进入While循环检查条件时

而(!feof(fp))

运行MinGW-GCC的DevC++IDE抛出了一个分段错误,但是在VC++6.0上运行的代码是相同的。代码成功运行,没有任何错误。 有什么问题吗??? 是因为我将文件指针作为参数传递吗??? 对于EOF表示,GCC编译器的其他一些约定是什么??? 如果是因为参数的传递,那么使用相同的参数传递方式(即传递文件指针)解决它的正确方法是什么?? */

  • 确保文件打开成功。可能您正在将
    NULL
    传递给
    feof()
  • 在执行I/O之前不要调用feof(),只在I/O失败后调用它
  • 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;