关于C++中读写文件出现乱码的问题

2025-03-13 12:17:09
推荐回答(5个)
回答1:

buff的大小改为101。
char buff[101];
每次fread完100个char之后,给最后一个buff[101]赋值为'\0'。
否则你在执行m_strNr=m_strNr+buff;这个语句的时候,系统把buff指向的字符串append到m_strNr上就会出现问题,因为系统要找到buff的结束符'\0',而这个值为0的内存地址不知道在buff后面的哪个地方出现。多半不会正好是buff后的第101个位置,说不定是第200个位置才出现了0,那么这199个char表示的字符串肯定就是乱码了,加到m_strNr上结果就可想而知了。 如果你断点设到这里的话,你可以查看buff,它已经是乱码了。
而且fread(buff,100*sizeof(char),1,f1); 这个最好改成
int n = fread(buff,sizeof(char),100,f1);
你不能保证你文件的长度正好是100字节的倍数吧。否则最后一次肯定是读不到100个字节的。这时你就得判断如果n != 100,那么你就得给buff[n]赋值为'\0'。然后才能+到m_strNr上去。
in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output. (MSDN)
大概是说在fread的时候,会把回车换行处理成单一的换行,fwrite到文件时候又会把换行还原成回车换行吧。你read了之后交给了其他控件,可能就没有回车符了。

回答2:

BUFF在初始化时给赋个初值都给成‘0’,把BUFF每次在用之前都清空一下,看看还有没有乱码。

回答3:

你试试:
f1=fopen(m_strPath,"r");
改成:
f1=fopen(m_strPath,"rt");

如果你这个文件是文本文件的话。

回答4:

不换行应该是输出用的文本框的多行属性没有设置
乱码没看明白理由,如果是中英混合的话,怀疑可能是100字节一读造成的
用记事本先打开文件看看有没有问题

回答5:

解压文件出现中文乱码怎么办解决办法