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

C语言文件操作提示系统找不到指定路径错误如何解决

C语言fopen读取用户输入路径报错的解决方案

问题根因

  • scanf("%s", path)读取规则限制:%s格式符遇到空格、制表符、换行符就会终止读取,若输入的路径包含空格(例如C:\Program Files\test.txt),读取到的路径会被截断,导致系统无法识别无效路径。
  • 路径输入误区:C语言硬编码字符串中需要用双反斜杠\\作为路径分隔符是转义规则要求,但用户手动输入路径时不需要输入双反斜杠,直接输入单反斜杠\即可,错误输入双反斜杠也会导致路径无效。
  • 输入缓冲区残留问题(非fopen报错直接原因,属于代码隐含bug):scanf读取路径结束后,输入时按下的换行符\n会残留在输入缓冲区中,后续调用fgets读取内容时会直接读取到空换行,无法正常获取用户输入的文本内容。

修复后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    FILE *fptr;
    char path[150];
    char content[2000];
    char *newline;

    puts("Enter the path of the file");
    // 改用fgets读取整行路径,支持带空格的路径
    fgets(path, sizeof(path), stdin);
    // 移除fgets读取到的末尾换行符
    newline = strchr(path, '\n');
    if (newline != NULL) {
        *newline = '\0';
    }

    fptr = fopen(path,"w");
    if(fptr==NULL){
        // 改用perror打印系统级错误信息,方便排查
        perror("Open file failed");
        exit(1);
    }
    printf("Enter a sentence:\n");
    fgets(content, sizeof(content), stdin);
    fprintf(fptr, "%s", content);
    fclose(fptr);
    printf("Content Successfully added to File");
    return 0;
}

操作注意事项

  • 输入路径时直接填写Windows标准路径即可,例如C:\Users\dell_latitude_3490\Documents\Hello.txt,不需要额外添加转义符。
  • 若路径指向的上层文件夹不存在,fopen的写模式w也会报错,需要确保路径中涉及的所有上级目录都已存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:36:03