C语言使用fopen读取Windows路径文件返回空指针如何解决?
问题原因及解决方案
第一步:先打印具体错误信息定位问题
你当前代码只输出了自定义的错误提示,没有获取系统返回的具体错误原因,建议把错误判断部分的代码替换为:if(!fp){ perror("fopen 失败"); // 会自动打印系统对应的错误描述,比如文件不存在、权限不足等 return 1; }运行后根据perror输出的具体内容可以快速定位问题。
第二步:路径输入的常见问题排查
- 你可以尝试将路径中的反斜杠
\替换为正斜杠/后再输入测试,Windows系统的fopen函数原生支持正斜杠作为路径分隔符,不需要处理转义逻辑,示例输入:C:/Users/User/Desktop/user_missions.csv - 如果是在代码中硬编码路径,才需要对反斜杠做转义(写为
\\),运行时通过控制台输入路径不需要额外转义,但要注意不要多输入空格、换行等多余字符。
- 你可以尝试将路径中的反斜杠
第三步:修复scanf缓冲区溢出风险
你当前使用的scanf("%s", file_name)没有限制输入长度,若输入的路径长度超过99字符会触发缓冲区溢出,导致内存异常进而影响fopen调用,建议修改为:scanf("%99s", file_name);限制最多读取99个字符,留1个字节存储字符串结束符
\0。第四步:路径有效性二次验证
可以先把目标user_missions.csv文件放到你编译生成的exe程序的同目录下,运行程序时直接输入文件名user_missions.csv测试,如果可以正常打开,说明原路径输入有误或者存在权限隔离问题:- 常见权限隔离场景:如果你用管理员权限启动IDE/控制台,运行编译后的程序时,访问的管理员账户的Desktop路径和你当前普通用户的Desktop路径不一致,会出现文件实际存在但找不到的问题。
- 检查Windows资源管理器是否开启了「隐藏已知文件类型的扩展名」,避免实际文件名为
user_missions.csv.txt,和你输入的路径不匹配。
内容的提问来源于stack exchange,提问作者李承軒
相关产品推荐
相关产品推荐

