MFC 从TXT文件里读取字符串,总是只读取到第一个字母,为什么

我试过各种方法比如CFilefile;CStringstr;file.Open(_T("my.txt"),CFile::modeRead,NULL);char*lpBuf... 我试过各种方法
比如
CFile file;
CString str;
file.Open(_T("my.txt"), CFile::modeRead,NULL);
char* lpBuf = new char[5];
memset(lpBuf,0,5);
file.Read(lpBuf,5);
str = lpBuf;
::AfxMessageBox( str );
delete lpBuf;
file.Close();
//网络上查到的各种读取字符串的方法,结果显示总是只取到目标字符串的首字母
展开
 我来答
归悦欣cf
推荐于2017-09-15 · TA获得超过1443个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1311万
展开全部
如果你读近内存的5个字节都是字符,那么意味着保存字符串的缓冲区lpBuf 的最后一个字节不是0,即没有字符串结束符,CString类型字符串要求字符串缓冲区的最后一个字节必须是0作为字符串的结束符。不是你读近内存的都是第一个字母,而是因为保存字符串的缓冲区最后一个字节不是0引起字符串显示错误

试一试这样
memset(lpBuf,0,5);

file.Read(lpBuf,4);//只读4个字节,而不是5个,保证最后一个字节是0

如果文本文件长度是n,那么分配的内存应该是n+1个字节,并且把最后一个字节设为0,即memset(lpBuf,0,n+1);然后,
file.Read(lpBuf,n);
str = lpBuf;
此时str就是整个文本文件的内容了。

注意:编程的时候要注意区分文本文件文本字符编码,即是多字节还是unicode
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式