0

我无法弄清楚为什么我的 c 程序中的这个 fclose() 会导致访问错误。它工作正常,然后我将 if 条件更改为仅在字符串不相等时才打印,突然它开始引起问题。除了错误的访问错误之外,它也没有向“newfile.txt”打印任何内容

    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>



    int main()
    {

        FILE * cFile;
        FILE *outputfile;

        FILE *newfile;
        cFile = fopen("input.in", "r");
        if (cFile == NULL){
        printf("bad input file");


        }
        newfile = fopen("newfile.txt", "w+");


    if (newfile == NULL){
        printf("bad newfile");

    }
        char tempstring[15];
        char tempstring2[15];

          //get each line in the cFile
       while (fscanf(cFile, "%15s", tempstring) != EOF) {


           outputfile = fopen("outputlotnum.txt", "r"); //open/(or reopen) outputfile  to check lines
          if (outputfile == NULL){
        printf("bad outputfile");
        }
            //get each line in the outputfile
           while(fscanf(outputfile, "%15s", tempstring2) != EOF){

                 //if the line from cFile doesn't match the line from outputfile,
                 //then go ahead and print the line to the newfile.txt
               if (strcmp(tempstring, tempstring2) != 0){

                    fprintf(newfile,"%15s \n", tempstring2);

               }

                 //else don't print anything and continue on to the next line

           }

           fclose(outputfile); //close the outputfile after checking all the lines for a match

       }

        fclose(newfile); //throws bad access
        fclose(cFile);


        return 0;

    }
4

1 回答 1

1

库函数段错误的一些原因包括将错误的参数传递给函数或您有一个内存涂鸦器。我怀疑在您的情况下,您溢出了堆栈上的一个或两个临时字符串数组并损坏了文件句柄。除非您可以保证您读取的字符串适合该缓冲区,否则将 fscanf/scanf 放入缓冲区通常不是安全的操作。

要确认这一点,您可以在打开后立即打印文件句柄,并在关闭前再次打印。他们应该是一样的。如果它们不是,那么您不小心覆盖了它们。

于 2013-05-18T21:28:18.643 回答