如果创建一个打开文件的函数,这些文件是否在函数返回后自动"fclose()"?



为了进一步解释这个概念,我包含了一个打开文件的示例函数:

int compare_files(const char *filenameone, const char* filenametwo)
{
FILE *mainfile = fopen(filenameone, "r");
FILE *checkerfile = fopen(filenametwo, "r");
int value = 1;
if (!mainfile || !checkerfile)
{
value = -1;
goto END;
}
int letter, letter2;
while ((letter = fgetc(mainfile)) != EOF && (letter2 = fgetc(checkerfile)) != EOF)
if (letter != letter2)
{
value = 0;
break;
}
END:
fclose(mainfile);
fclose(checkerfile);
return value;
}

在上面的例子中,我是否需要为mainfile和checkerfile调用fclose()?或者,一旦函数完成,这些文件会被关闭吗?

;X在C中自动发生吗"是:无

在这种情况下也是如此。通常,当您到达主函数的末尾或调用exit()函数时,打开的文件会被关闭。动态分配内存也是如此。但是,如果程序异常退出,例如由于被零除或分段错误,这可能会造成麻烦。然而,在某些环境中却不会发生这种情况。它在嵌入式系统中很常见。

所以,用完文件后,请关闭它们。并释放所有分配的内存。这是个好习惯。

我会这样写你的函数:

int compare_files(const char *filenameone, const char* filenametwo)
{
int ret = -1;
FILE *mainfile = fopen(filenameone, "r");
if(!mainfile) goto EXIT1;
FILE *checkerfile = fopen(filenametwo, "r");
if(!checkerfile) goto EXIT2;
ret = 1;
// Not related to your question, but these should be int since
// a char cannot hold the value EOF
int letter, letter2;
while ((letter = fgetc(mainfile)) != EOF && (letter2 = fgetc(checkerfile)) != EOF) {
if (letter != letter2) {
ret = 0;
break;
}
}
fclose(checkerfile);
EXIT2:
fclose(mainfile);
EXIT1:
return ret;
}

最新更新