You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用fclose函数导致提示语句无法执行的原因分析

fclose函数导致提示语句无法执行的原因分析

问题场景

测试fclose函数时发现:当保留fclose(p_file2)代码行时,printf("File \"file2.bin\" inexistent!");语句无法被执行;移除该行后,该提示信息可正常显示。相关C语言代码如下:

#include <stdio.h>

int main()
{
    printf("Hello files");
    FILE *p_file1, *p_file2;
    p_file1 = fopen("file1.bin", "w+b");
    p_file2 = fopen("file2.bin", "r+b");
    if (p_file2 == NULL)
        printf("File \"file2.bin\" inexistent!");
    
    fclose(p_file1);
    fclose(p_file2);

    return 0;
}

原因解析

  1. 空指针调用fclose触发未定义行为:当file2.bin不存在时,fopen打开失败,返回NULL给p_file2。此时调用fclose(NULL)属于C标准定义的未定义行为——程序可能直接崩溃、提前终止,或者出现其他不可预料的结果。
  2. 输出缓冲区未刷新:标准输出默认是行缓冲模式,printf的内容没有换行符\n,会暂时留在输出缓冲区里。如果程序因为fclose(NULL)崩溃终止,操作系统不会自动刷新缓冲区,导致终端看不到提示信息;移除fclose(p_file2)后,程序正常执行到结束,会自动刷新缓冲区,所以提示内容能显示出来。

内容的提问来源于stack exchange,提问作者Dalton Cézane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:54:58