C语言fclose错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言fclose错误相关的知识,希望对你有一定的参考价值。

一段极简单的代码:int main() FILE *fp1,*fp2,*fp3; fp1=fopen("sx.txt","r"); fclose(fp1);执行到fclose(fp1)时却莫明其妙的出错了。提示截图:

原因是fp1=fopen("sx.txt","r");
这句你以只读的方式打开sx.txt文件,
如果该文件打开失败(如该文件不存在),则fp1的值为NULL
这时你去fclose(fp1);肯定会发生异常的。

应该这么写:
fp1=fopen("sx.txt","r");
if (fp1 !=NULL)

fclose(fp1);
参考技术A

这是因为,打开文件时出错了。

要么文件不存在,要么被别的软件独占打开。这样的话,前面的fopen是失败的,当然后面就不能关闭了。

正确的打开方式是要检测文件打开是否成功的。

int main()
  FILE  *fp1,*fp2,*fp3;
   fp1=fopen("sx.txt","r");
   if(fp1!=NULL)
    fclose(fp1);

段错误 - fclose / fopen

【中文标题】段错误 - fclose / fopen【英文标题】:Segfault - fclose / fopen 【发布时间】:2013-03-27 00:24:55 【问题描述】:

我的以下 C 代码有问题:

int main(void)

    FILE* infile = fopen("file","r);
    FILE* fp = NULL;

    unsigned char* buffer = malloc(512);

    while( fread(buffer,512,1,infile) > 0 ) //reading a file block by block

           if(buffer[0] == 0xff)
               ... //defining variable "name"
               if(fp != NULL)fclose(fp);
               fp = fopen(name,"w+");
               fwrite(buffer,512,1,fp);
            else if(fp != NULL) 
                   fwrite(buffer,512,1,fp);
           

    


fclose 后我似乎无法使用相同的指针打开 fopen,为什么?我需要我的指针在主要的任何地方都可以访问,所以我不能在我的时间里声明一个新的。

编辑:天哪,问题解决了。我可能是超级累了。我正在编译错误的文件。无论如何...

谢谢各位!

【问题讨论】:

你没有在那里“使用”同一个指针。您只是在捕获一个返回值。段错误是由您未在此处发布的代码引起的。 我知道这很奇怪,但如果我不使用 flose(fp) 释放内存,则不会再发生 sgefault。 请构建最小的完整程序来重现问题。 在这里,我编辑了我的代码。谢谢你们的回答。 请注意,fread(buffer, 512, 1, infile) 将返回 0 或 1,具体取决于它是否读取 512 字节。如果您只想读取 512 字节块,那很好。如果您想一次最多读取 512 个字节,那么您需要 size_t nbytes = fread(buffer, 1, 512, infile); 并检查您读取的字节数是否为非零。 【参考方案1】:

很难说出原因,因为您没有向我们展示您的所有代码。但是,重新打开文件应该非常简单:

#include <stdio.h>

int main(void)

  FILE* fp = NULL;
  char name[] = "somefile";

  for (;;)
  
    // do something
    if ((fp = fopen(name, "w+")) == NULL)
      break;
    // do something with the file
    fclose(fp);
    // do something
  

  return 0;

【讨论】:

如果fopen() 返回NULL,你有一个错误——可能不应该只是从循环中中断。 @DietrichEpp 是的。我只是表明重新打开很简单。

以上是关于C语言fclose错误的主要内容,如果未能解决你的问题,请参考以下文章

C语言文件复制

C语言标准io函数总结

C 语言 文件操作

PHP Warning: fclose(): 怎么解决 在线等待

c语言messagebox的提问

c语言 save函数