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

使用fread读取文件内容出现乱码,求问题原因及解决方法

C语言读取文件乱码问题的原因及解决方法

核心原因

  • fread仅读取文件中的原始字节,不会自动为字符串添加终止符\0。而printf使用%s输出时,必须读取到\0才会停止,否则会继续读取内存中后续的随机垃圾数据,导致输出乱码。
  • 未检查fopen的返回值,如果文件打开失败(如路径错误、权限不足),f_fd会是NULL,此时执行fread会触发未定义行为,同样可能导致乱码或程序崩溃。

修复后的代码

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

int main(){
  char* arr = malloc(64);
  if (arr == NULL) {
    perror("malloc failed");
    return 1;
  }
  FILE* f_fd = fopen("file_txt", "r");
  if (f_fd == NULL) {
    perror("fopen failed");
    free(arr);
    return 1;
  }
  // 最多读取63字节,留1个位置存放字符串终止符
  size_t read_len = fread(arr, 1, 63, f_fd);
  arr[read_len] = '\0'; // 手动添加终止符
  printf("|%s|\n", arr);
  fclose(f_fd);
  free(arr);
  return 0;
}

关键修复说明

  • 增加malloc和fopen的返回值检查,避免空指针操作引发的异常。
  • 读取内容时预留1字节空间,手动添加\0,保证printf能正确识别字符串的结束位置。
  • 使用完文件和内存后,调用fclose和free释放资源,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:45:36