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

CMD命令输出文件含提前EOF标识,C程序读取中断问题求助

解决文件中含特殊字符导致读取提前终止的问题

这个问题我之前也踩过类似的坑,核心原因是你用了char类型来存储getc()的返回值,而没有使用正确的int类型。

问题根源

getc()函数的返回值是int类型,而非char:

  • 读取到有效字符时,它会把字符转换成无符号char再转成int,正常字符的返回值范围是0-255;
  • 读取到文件末尾或发生错误时,返回EOF(通常被定义为-1)。

如果你的编译器默认把char当作有符号类型(绝大多数主流编译器都是如此),那么当文件中出现0xFF(也就是你看到的ÿ字符)时,这个值存在char变量里会被解释为-1,和EOF的数值完全一致,导致循环提前判断为“已到文件末尾”,终止读取。

修改后的代码

只需要把存储字符的变量类型从char改成int,再加上必要的文件打开错误判断,就能完整读取整个文件:

#include <stdio.h>

int main() {
    const char* completePath = "你的目标文件路径"; // 替换为实际文件路径
    FILE *file;
    file = fopen(completePath, "r");
    
    // 新增:检查文件是否成功打开,避免空指针操作
    if (file == NULL) {
        perror("无法打开文件");
        return 1;
    }
    
    int character; // 这里改为int类型,是解决问题的关键
    while((character = getc(file)) != EOF) {
        putchar(character);
    }
    
    fclose(file);
    return 0;
}

额外说明

  • 用int存储getc()的返回值后,0xFF字符会被保存为255,和EOF的-1完全区分开,循环会一直执行到真正的文件末尾。
  • 永远不要省略fopen的返回值检查——如果文件不存在、权限不足等情况,fopen会返回NULL,后续操作会直接崩溃,加上错误判断能让程序更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:48:54