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

C程序调用open、write操作文件时printf调试输出缺失问题

问题根因

  • datafile分配的内存不足:你给datafile仅分配了20字节,但存储的路径C:\\Users\\____\\Documents\\Notes转义后的实际字符长度已经远超过20字节,调用strcpy时发生内存越界,触发未定义行为,直接导致程序逻辑异常、后续输出丢失,这也是你调整分配内存大小后就能正常运行的核心原因。
  • ec_malloc函数存在逻辑错误:内存分配成功后没有返回指向分配内存的指针ptr,导致main函数中拿到的buffer和datafile本质是野指针,访问野指针本身就会导致程序崩溃或逻辑异常,属于非常容易忽略的隐藏隐患。
  • 输出缓冲问题:最后一句printf("Note has been saved.")末尾没有加换行符,Windows终端默认stdout是行缓冲,只有遇到换行符时才会把缓冲区内容输出到屏幕,就算程序正常执行完成,你也大概率看不到这条提示。

修复方案

  1. 给datafile分配足够的内存,至少要大于你存储的路径字符串长度,你调整为100字节的方案完全可行。
  2. 补全ec_malloc的返回逻辑,分配成功后正常返回ptr:
void *ec_malloc(unsigned int size)
{
    void *ptr;
    ptr = malloc(size);
    if(ptr == NULL)
    {
        fatal("in ec_malloc() on memory allocation");
    }
    return ptr;
}
  1. 给所有printf的输出末尾加换行符,尤其是最后一条提示改成printf("Note has been saved.\n");即可正常显示。

内容的提问来源于stack exchange,提问作者rhozagi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:03