CEdit::GetLine 在Win7上返回字符串乱码问题的解决方案 CEdit::GetLine (MFC, VC++6) returns extra characters in Windows

本文介绍了在Windows 7环境下,使用MFC的CEdit控件的GetLine函数获取字符串出现乱码的问题。问题源于GetLine函数返回的字符串缺少结束符。解决方案是利用GetLine返回的字节数确定字符串长度进行赋值,从而避免乱码。通过修改代码,将GetLine后的字符串正确转换为CString,解决了该问题。
摘要由CSDN通过智能技术生成

    最近在帮公司一个小孩看一个很奇怪的bug,是MFC 的一个小GUI,在客户环境上一个输入框中的数据总是有乱码,导致从数据库中查不出数据。但是奇怪的是在我们环境上重现不了,因为我们的测试环境用的是Win XP, 客户环境上用的是Win7(我们一开始就没想到过跟不同的操作系统有关)。最开始我们都是怀疑是code在转换UTF8的时候出的错,可是根据给客户的debug版本否定了我们这种猜测,因为我们发现在转换之前debug打印出来的字符串就已经是错误的了。如下图所示:

 

奇怪的这个字符串就是直接从界面的输入框中得到。先看一下code吧:

TCHAR    szAccountNo[GAL_TICKLER_ACCT_LEVEL_EXTERNAL_ID_LEN];

m_eAccountNo.GetLine(0,szAccountNo, GAL_TICKLER_ACCT_LEVEL_EXTERNAL_ID_LEN );

CString szAcctno= szAccountNo;

szAcctno =ArbI18N::translateToUTF8(szAcctno);

 

我们在调用translateToUTF8之前加了一处debug信息,就是上图显示的account_no的字符串,这时它已经是有乱码的了,也就是说字符串从GetLine()这个函数获得结果就是含有乱码的。这个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值