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

C语言写入文件的文本为何变为中文乱码?新手技术求助

问题分析与解决

你的代码存在两处核心问题,同时中文乱码源于编码不匹配,以下是具体修复方案:

代码中的明显错误

  • 第二次调用fopen读文件时,未将返回的文件指针赋值给fptr,后续用写模式的指针读取属于未定义行为,会导致读取异常。
  • 写入文件后未关闭或刷新缓冲区就直接读取,内存中的数据可能还未同步到磁盘,读取结果不可靠。

中文乱码的本质与修复

Windows环境下,默认文件编码为GBK,而控制台或代码中常用UTF-8编码,两者不匹配就会出现乱码。以下是修复后的完整代码:

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

int main()
{
    // 以UTF-8编码打开文件写入
    FILE *fptr = fopen("C:\\Users\\USER\\Downloads\\text.txt", "w,ccs=UTF-8");
    if (fptr == NULL) {
        perror("打开文件失败");
        return 1;
    }
    // 写入中文与英文内容
    fprintf(fptr, "你好,世界\nHello World\n");
    fclose(fptr); // 关闭文件确保数据写入磁盘

    // 以UTF-8编码打开文件读取
    fptr = fopen("C:\\Users\\USER\\Downloads\\text.txt", "r,ccs=UTF-8");
    if (fptr == NULL) {
        perror("打开文件失败");
        return 1;
    }
    char input[100];
    while (fgets(input, 100, fptr) != NULL) {
        printf("%s", input);
    }
    fclose(fptr);

    return 0;
}

关键修复点

  • 强制指定编码:在fopen的模式参数后添加,ccs=UTF-8,让文件以UTF-8编码读写,统一编码避免乱码。
  • 正确管理文件指针:每次打开文件后检查指针是否为空,切换读写模式时必须重新赋值指针并关闭旧指针。
  • 添加错误处理:用perror输出文件打开失败的原因,方便排查问题。

额外提示

如果控制台输出中文仍乱码,可在代码开头添加system("chcp 65001");,将控制台编码切换为UTF-8,与文件编码保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:52:13