CString与char[] 的相互转换方法以及结尾乱码问题的分析解决

  这是一个很常见的问题,下面记录下我的解决方案。

 

一、CString 转化成char[]

 

方法一:运用 CString.GetBuffer(0) 与 strcpy

CString str; int len = str.GetLength(); char* arr = new char[len]; strcpy(arr,str.GetBuffer(0));

 

二、char[]转化成CString

 

首先我们就会想到下面的写法

 

char ch[7] = {'w','u','d','i','z','h','u'}; CString szTest(ch); AfxMessageBox(szTest);

char ch[7] = {'w','u','d','i','z','h','u'}; CString szTest; szTest.Format("%s",ch); AfxMessageBox(szTest);

 

可是运行结果都是:

 

在CString的最后多出了乱码,而测试得到的CString对象的长度为7,这是为什么呢?我想是这样的:

 

CString 对象将ch 当做字符串来处理的,所以在把一个char[]转化成CString对象时,会分两个过程

 

1. 首先会把char[]转化成char*,这个转化就会在字符串的结尾产生乱码,测试如下:

char ch[2] = {'a','b'}; TRACE("%s",ch);

调试运行得到:

ab烫t

 

2. 把char*字符串存储在CString对象的CStringData 对象中,这是保存的已经是存在乱码的数据了,所以在输出时

就出现了我们看到的乱码。

 

到这里或许大家都知道了乱码的原因了吧。

 

下面就着手解决,这个自然就不是问题了,只要将数组的最后一位赋值为'/0'即可。

char ch[3] = {'a','b','/0'}; CString str; str.Format("%s",ch); AfxMessageBox(str);

结果如下:

 

 

 

至此问题解决

 

 

 

转载于:https://www.cnblogs.com/JarvisChu/archive/2010/10/04/2752533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值