我通常从stdin
或文件名中读取:
FILE *open_file(char *filename, FILE *fallback, char *mode)
{
FILE *fp = fallback;
if (filename != NULL) {
if ((fp = fopen(filename, mode)) == NULL) {
fprintf(stderr, "Error: cannot open '%s'!\n", filename);
exit(ERROR_CANNOT_READ_FILE);
}
}
if (fp == NULL) {
fprintf(stderr, "Error: file error!\n");
exit(ERROR_CANNOT_READ_FILE);
}
return fp;
}
int main(int argc, char* argv[]) {
FILE *fp = open_file(argc > 1 ? argv[1] : NULL, stdin, "r");
// some stuff...
if(!fclose(fp)) {
exit(EXIT_FAILURE);
}
}
在此示例中,fclose
可能有问题。我无法关闭stdin
和stdout
。如何正确有条件地关闭fp
?
我必须关闭fp
吗?
如果文件成功关闭但在您的代码中,fclose()返回0
if(!fclose(fp)) {
exit(EXIT_FAILURE);
}
如果fclose()成功关闭文件,则为true,因此您可以将其更改为
if(fclose(fp)) {
exit(EXIT_FAILURE);
}
或
if(fclose(fp)!=0){
exit(EXIT_FAILURE);
}