用文件函数读取文件内容出现乱码的原因及解析,文件问题(1)

我们在写一些项目的时候,需要使用文件来获取和存储数据,而在操作文件的时候作为初学者的我们,必不可免的会出现一些令人抓狂的问题,比如说,标题所写的问题,我在这里向大家分享一些我曾遇到的问题的原因解析及解决方案,帮助大家避坑,帮助大家更好学习~~~

我们在用C写代码的时候,文件(二进制文件)一般是如此打开的:

#include<stdio.h> 

int main(){
    
    
FILE *fp;

if((fp=fopen("D:\\file\\ff.dat","rb+"))==NULL){
    
    
 printf("can't open!");
 exit(0);//结束程序
 }

else{
    
    
...
}

打开文件后,我们才能依靠文件指针实现文件的读写操作,而有时候使用**fread();**函数读出数据再输出,发现好好的文件里的数据,输出竟出现的乱码!如下所示:

在这里插入图片描述

造成此种结果出现,原因可能多种,我们要一一调试排除:
  1. 测试是否是编译器不支持中文的输出而造成的乱码,可使用 printf(“你好!”);这样的直接输出中文的语句测试。
    如果也出现乱码,就要去调试系统编码和编译器编码之间的统一的,如果是采用的codeblocks集成开发环境,详细可参考:codeblocks出现中文乱码的原因及解决

  2. 如果你的文件是文本文件(.txt),可以直接使用记事本查看内容是否存在,是否正确。

  3. 查看你写函数的操作是否有误,一般来说,不可以自己手动打开文件进行写操作,要使用文件写的函数如(fputs();fscanf();fwrite();)等函数将信息写入文件,再用相对的文件读取出数据如(fgetc();fprintf();fread();)等。
    数据读出写入都使用一定的格式处理就不容易出问题,随便使用,可能会导致某个数据块多一个空格等多余数据,那么使用函数读出的时候,就会出现把这个数据块后面一个数据块取出的时候空格就会占一个位置就会导致后面数据都对不上号的问题。由此就出问题了,我们可以选择把文件刷新,重新严格写入新数据,再读出看看。

  4. 查看自己的写入数据一块的函数是否在写完数据之后没有关闭文件
    没有关闭文件的话,刚刚写入的数据并没有进入文件,而是暂时存在缓冲区内,那么文件中没有数据,当然会输出乱七八糟的东西。这也是很多初学者曾经会犯的错误,因此括号一次性打,文件函数打开关闭一起写,也是一个好的习惯。

  5. 检查自己的文件打开方式是否有误,如果是文本文件,打开方式可不加b,是二进制文件的话,必须加b.如下

FILE *fp1,*fp2;
fp1=fopen("D:\\file\\ff.txt","r+");//"+"表示可读可写
fp2=fopen("D:\\file\\cc.dat","rb+");

个人经验有限,欢迎其他同学和大佬补充,相互学习~

猜你喜欢

转载自blog.csdn.net/lidancsdn/article/details/106980259