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

为何C语言中getc函数未返回正确整数值?

问题原因分析

你的代码出现问题有两个核心原因:

  • 文件打开模式错误:你用"w"模式打开文件,这个模式是只写模式,不允许进行读操作。在只写流上调用getc()属于未定义行为,返回的0是不可预期的随机结果,不是有效字符值。
  • 文件位置指针未重置:哪怕你用了正确的读写模式,写完字符后,文件位置指针会停在文件末尾,此时直接读会读取到EOF(值为-1),也读不到刚写入的内容。
修正方案
  1. 改用支持读写的打开模式,比如"w+":这个模式会创建/清空文件,同时允许后续的读写操作。
  2. 写完内容后,用rewind()或fseek()重置文件位置指针到文件开头,这样才能读取刚写入的内容。
修正后的代码示例
#include <stdio.h>
int main(){
    FILE *pointer_to_text;
    // 改用w+模式,支持读写
    pointer_to_text = fopen("kot.txt","w+");
    if (pointer_to_text == NULL) { // 增加错误判断,避免空指针操作
        perror("Failed to open file");
        return 1;
    }
    fprintf(pointer_to_text,"%c",'c');
    // 重置文件指针到开头
    rewind(pointer_to_text);
    // 也可以用 fseek(pointer_to_text, 0, SEEK_SET);
    int c = getc(pointer_to_text);
    printf("%d\n",c); // 补全换行符的转义
    fclose(pointer_to_text);
    return 0;
}

运行这段代码会输出99(字符'c'的ASCII值),符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:23:17