C语言使用fscanf读取txt文件打印乱码替换字符如何解决
问题原因
- 你没有对
fopen的返回值做校验,出现乱码的核心原因是**collection.txt文件打开失败**,ptr为NULL,后续对空指针执行fscanf操作读取到了非法内存的随机值,也就是你看到的P7k乱码。 - 额外问题:就算文件打开成功,你用
%s格式符通过fscanf读取内容时,遇到空格就会停止读取,只能拿到第一个单词hi,也无法输出完整的文件内容。
修复步骤
- 先确认
collection.txt文件和编译后的C程序在同一个文件夹下,避免路径不匹配导致打开失败 - 增加
fopen返回值的空校验,避免空指针操作 - 改用
fgets函数读取整行内容,或者循环读取直到文件末尾,获取完整的文件文本
修正后的代码
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *ptr; char data[1000]; ptr = fopen("collection.txt", "r"); // 增加空指针校验 if (ptr == NULL) { printf("文件打开失败,请检查文件路径是否正确\n"); return 1; } printf("Hello world \n"); // 循环读取直到文件结束,输出全部内容 while (fgets(data, sizeof(data), ptr) != NULL) { printf("%s", data); } fclose(ptr); return 0; }
内容的提问来源于stack exchange,提问作者math101
相关产品推荐
相关产品推荐

