c - 如果我在 fopen() 失败时使用 fclose() 会发生什么(可能)

标签 c fopen fclose

<分区>

这是我的相对简单的场景,我想知道我是否可以为自己节省一个条件并稍微整理一下代码。它的生产代码是别人写的,我只是在整理。它根本没有 fclose,所以我添加的只是条件 fclose() 行:

  FILE *fp;
  struct stat sb;
  /* snipped code */
  if (((fp = fopen (config_file, "r+")) == NULL) || (fstat (fileno (fp), &sb))) {
      syslog (LOG_ERR, "Fault. Unable to read config file");
      if (fp != NULL) {
          fclose (fp);
      }
      return -1;
  }
  /* code carries on after this */

问题是,我真的需要在我的代码中加入 if(fp != null) 吗?不检查就执行 fclose(fp) 有什么含义?我读过 C89 标准,但我不清楚结果会是什么。

提前干杯

史蒂夫

最佳答案

空指针上的

fclose 具有未定义的行为。这意味着它可能会出现段错误或给您带来问题。我会坚持你的检查,因为它们是很好的做法,并且使代码更易于阅读。

关于c - 如果我在 fopen() 失败时使用 fclose() 会发生什么(可能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14679972/

相关文章:

php - SQL 结果作为 txt.file 由 php

c - 是否存在一种在 atexit 或类似方法中释放内存而不使用全局变量的方法?

java - Android 修复使用后退按钮关闭主要 Activity

c - 我如何比较 int 指针和 char 指针?

c - 退出 FOR 并打印消息的任何想法

php - 利用php fopen中的漏洞

linux - fclose 在 Linux 上克隆线程后挂起

python - 任意 C 项目的预处理

c - 如何实现 IF 来检测文件读取时的最后一个字节?

PHP - 下载大文件的安全方法?