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是行缓冲,只有遇到换行符时才会把缓冲区内容输出到屏幕,就算程序正常执行完成,你也大概率看不到这条提示。
修复方案
- 给
datafile分配足够的内存,至少要大于你存储的路径字符串长度,你调整为100字节的方案完全可行。 - 补全
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; }
- 给所有printf的输出末尾加换行符,尤其是最后一条提示改成
printf("Note has been saved.\n");即可正常显示。
内容的提问来源于stack exchange,提问作者rhozagi
相关产品推荐
相关产品推荐

