c - 如何确保 malloc/free fopen/fclose 匹配?

标签 c fopen

我觉得下面的代码是正常的(malloc/free也差不多):

int foo(){

   FILE *fp = fopen("test.in", "r");

   int i;   

   for(i = 0; i < NUM; i ++){
       if(Match(fp, i)){    
            fclose(fp);
            return i;
       }
   }

   fclose(fp);
   return 0;
}

正如我们所见,fclose(fp) 在代码中出现了两次。如果函数 foo 中有其他 return 语句,它会出现更多。但是,麻烦的是我要多次写fclose(fp)。一种解决方案只是一个函数的一次返回。但是,多次返回有时很有用。还有其他解决办法吗?

PS: 据我所知,lisp 中有一个宏(with-open-file)。

(with-open-file (stream-var open-argument*) 
    body-form*)

它可以为我们打开和关闭文件。

最佳答案

使用 break 通常有帮助:

int foo() {

   FILE *fp = fopen("test.in", "r");

   int i, result;   

   result = 0;
   for(i = 0; i < NUM; i ++){
       if(Match(fp, i)){    
            result = i;
            break;
       }
   }

   fclose(fp);
   return result;
}

关于c - 如何确保 malloc/free fopen/fclose 匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338787/

相关文章:

c - 没有使用 fopen 获取文件中的所有数据

c++ - 为什么在fopen中使用 'r+'模式时文件必须存在?

c - 在 C 中打开文件

c - 如何修改makefile以便我可以在ARM平台上运行代码?

c - gcc 对其依赖项如此保守的真正原因是什么? ( MPFR, GMP, MPC )

c - 从管道中读取整数会跳过 C 中的值

c - intXX_t 和 int_fastXX_t 有什么区别?

c - 使用 char** 的项目(声明后初始化后)

c - 随着时间的推移,文件的连续、后续加载会变得更慢

c++ - fopen_s 未在 ubuntu 下解决