例如:

FILE* file_name;
file_name = fopen("some.txt", "r");  // some.txt isn't exist
if (file_name !=NULL)
  printf("nice");
fclose(file_name);

fclose年后会发生什么?

推荐答案

NULL指针传递给fclose会触发未定义的行为.

fclose函数在C standard的第7.21.5.1节中记录为库函数,第7.1.4p1节规定了以下有关库函数的内容:

除非明确说明,否则以下各项声明均适用 否则,在下面的详细描述中:If an argument to a function has an invalid value(例如域之外的值 函数或程序地址空间之外的指针, or a null pointer,或指向不可修改存储的指针. 对应的参数不是常量限定的)或类型(在 提升)不是具有可变数目的函数所期望的 辩论,the behavior is undefined.

第7.21.5.1节没有明确提到将NULL指针传递给fclose,所以上面的语句适用.

C++相关问答推荐

使用SWI—Prolog的qsave_program生成二进制文件有什么好处?'

C语言中字符数组声明中的标准

为什么在Linux(特别是Ubuntu 20.04LTS)上,POSIX共享内存对象在重启后仍然存在,然后突然变成了根用户?

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

如何在不使用其他数组或字符串的情况下交换字符串中的两个单词?

在C++中使用函数指针的正确语法

VS代码';S C/C++扩展称C23真关键字和假关键字未定义

如何在C中打印包含扫描字符和整数的语句?

如何在CANbus RX/TX FIFO起始地址寄存器(ATSAME 51)的特定地址初始化数组?

如何编写一个for循环来计算C中各项的总和?

为四维数组中的Dim-1和Dim-3重新分配空间

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

从Raku nativecall调用时精度不同

如何打印循环调度问题的时间表

C 错误:对 int 数组使用 typedef 时出现不兼容的指针类型问题

#define X Defined(Y) 是有效的 C/C++ 宏定义吗?

当循环变量在溢出时未定义时,可以进行哪些优化?

将帧从相机 (/dev/video0) 复制到帧缓冲区 (/dev/fb0) 会产生意外结果

M1 Mac 上的 jmp_buf 如何解码?