C语言fprintf无输出求助:filename.txt未生成
解决方法
1. 先排查文件是否真的被成功创建
你的代码没有检查fopen是否成功,如果因为权限、路径等问题导致文件无法创建,程序会直接跳过写入操作,你也不会收到任何提示。而且原代码不管文件指针是否为空都执行fclose,这是不安全的。先修改代码,加上错误检查:
#include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> // 用于getcwd int main() { FILE *fp = NULL; fp = fopen("filename.txt", "w+"); if (fp != NULL) { fprintf(fp, "%s %d", "Hello", 555); fclose(fp); // 仅在文件成功打开时关闭 } else { perror("无法打开文件"); // 打印具体错误原因,比如权限不足、路径不存在等 } // 打印当前工作目录,方便定位文件位置 char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) { printf("当前工作目录:%s\n", cwd); } else { perror("获取工作目录失败"); } return 0; }
运行后看控制台输出:
- 如果打印"无法打开文件"和具体错误,根据提示解决(比如权限问题就给文件夹写入权限)。
- 如果打印了工作目录,直接去这个目录找
filename.txt。
2. 调整IDE的工作目录
Xcode和VSCode默认的运行工作目录不一定是你的源码所在文件夹:
- Xcode:
- 点击顶部菜单栏的
Product->Scheme->Edit Scheme - 在弹出的窗口中选择
Run->Options - 勾选
Use custom working directory,然后选择你的源码所在的文件夹,保存后重新运行,文件就会生成在源码目录里。
- 点击顶部菜单栏的
- VSCode:
- 打开
.vscode/launch.json(如果没有就创建一个) - 在
configurations数组里找到你的C程序配置,添加或修改cwd字段为"${fileDirname}",这样运行时工作目录就是当前源码文件所在的目录:{ "name": "C/C++: gcc build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", // 这里设置为源码文件所在目录 "environment": [], "externalConsole": false, "MIMode": "lldb", "preLaunchTask": "C/C++: gcc build active file" }
- 打开
3. 用绝对路径快速验证
如果不想调整IDE设置,可以直接在fopen里写绝对路径,比如:
fp = fopen("/Users/你的用户名/Desktop/filename.txt", "w+");
运行后去桌面找文件,确认代码逻辑本身没问题。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

