语法正确的fopen在Windows下无法运行,errno=2求助排查
errno=2对应ENOENT错误,意思是系统找不到指定的文件或目录,优先从路径、工作目录方向排查,以下是具体解决步骤:
确认程序运行的当前工作目录
VSCode终端的默认工作目录不一定是代码文件所在目录。运行程序前先在PowerShell里执行cd命令查看当前路径,程序里的相对路径"output.txt"是基于这个路径创建文件的。如果代码在子目录里,终端却在项目根目录,自然找不到要创建的文件位置。修正绝对路径格式
Windows下使用绝对路径时,要么用双反斜杠转义(比如C:\\Users\\YourName\\Desktop\\output.txt),要么直接用正斜杠(C标准库支持正斜杠作为路径分隔符,比如C:/Users/YourName/Desktop/output.txt)。同时要确保路径里的每一级父目录都存在,fopen的"a"模式只会创建文件,不会自动创建不存在的目录。修复代码中的细节问题
你的fwrite调用会写入字符串末尾的空字符\0,因为sizeof("hello")包含了这个终止符,应该用strlen("hello")获取有效字符长度,记得添加<string.h>头文件。另外可以优化错误提示,直接打印可读的错误描述,不用记错误码:#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> int main (int argc, char ** argv) { FILE * fp; // 替换为你确认存在的目标路径,比如桌面绝对路径 fp = fopen("output.txt", "a"); if (!fp ) { fprintf(stderr, "创建文件失败: %s\n", strerror(errno)); exit(1); } // 写入有效字符,避免多余的空字符 fwrite("hello", sizeof(char), strlen("hello"), fp); fclose(fp); return 0; }排查权限与杀毒软件干扰
先手动在目标目录创建文件测试:PowerShell里执行"test" | Out-File output.txt,如果创建失败,说明目录没有写入权限,换一个有写入权限的目录(比如桌面)。另外可以临时关闭杀毒软件测试,部分杀毒软件会拦截程序的文件创建操作。
内容的提问来源于stack exchange,提问作者rnnUSer11

