This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center




8年前关闭。




这是我相对简单的场景,我想知道是否可以为自己节省一个条件并将代码整理一下。它的生产代码是别人写的,我只是在整理。它根本没有 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/

10-11 07:08