关闭数组中的文件指针

问题描述

我想知道是否有更好的方法关闭数组中的文件指针,而不是让 for 循环遍历数组:

argc -= optind; argv += optind;

FILE *inputfiles[argc - 1];

int i;
for (i = 0; i < argc; i ++)
    inputfiles[i] = fopen(argv[i],"r");

fnctn(inputfiles);

int f;
for (f = 0; f < argc; f++)
    fclose(inputfiles[f]);

解决方法

fcloseall 作为 GNU 扩展存在。要知道这也会关闭 stdinstdoutstderr

standard C 中没有类似物。

您也可以简单地退出程序,并依靠操作系统来清理商店。这通常被认为是不好的做法。


尽管我假设它主要是模拟代码,但应该注意的是,您的示例中存在一些逐一错误。

int i;
for (i = 0; i < argc - 1; i ++)
    inputfiles[i] = fopen(argv[i + 1],"r");

int f;
for (f = 0; f < argc - 1; f++)
    fclose(inputfiles[f]);

还有一种情况,argc1,您将声明一个零大小的数组 (FILE *inputfiles[1 - 1];),即 invalid in ISO C.