读取txt文件有乱码
读取txt文件的时候出现了乱码,如图,这是什么原因啊,为什么输出8个字符后,还有那几个乱码
#include<iostream>
#include<stdio.h>
#include<windows.h>
#define MAX_BUFFER_LEN 8;
bool DealFile(char* fileName) //随便写个函数说明
{
FILE *file;
DWORD fileSize ,pos;
pos=0;
int readLen ;
//MAX_BUFFER_LEN 在头文件里定义,这里能够保证数据不丢失,也不至于内存逸出
char *buffer = new char[8];
file = fopen(fileName,"r+b");
if(file == NULL) return false;
fseek(file,0,2);
fileSize = ftell(file); //取得文件的大小
fseek(file,0,0);
do{
readLen=fread(buffer,sizeof(char),8,file);
//std::cout<<fileSize;
//std::cout<<" ";
//std::cout<<buffer;
printf("%s\n",buffer);
if(readLen > 0)
{
pos += readLen;
//对读取的文件做处理
}
}while(pos < fileSize); //循环读取文件
delete[] buffer;
fclose(file); //释放资源
return true;
}
int main()
{
DealFile("a.txt");
return 0;
}
[解决办法]
file = fopen(fileName,"r+b");
改为
file = fopen(fileName,"r");
试试看
[解决办法]
buff的长度是8,读取文件的字符数量也是8
所以,buff是一个字符串数组,而不是一个c风格的字符串,buff没有'\0'结束符
用print把buff当作字符串输出,后面当然会有乱码,一直碰到内存中刚好有'\0'为止。
[解决办法]
#include "afxwin.h"
void main()
{
int leng = 0;
FILE *fs = fopen("C:\\1.txt","rb");
fseek(fs,0,SEEK_END);
leng = ftell(fs);
fseek(fs,0,0);
char a[100];
fread(a,1,100,fs);
MessageBox(0,a,0,0);
fclose(fs);
}
这样就没有问题,我只读取了100个字节,除了最后一个字可能是乱码之外,其他的都没有问题。
因为,最后一个字可能要用到第101个字节,但我只读取了100个字节,所以可能会出乱码。
[解决办法]