一、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);
结果如下:
至此问题解决
http://www.cnblogs.com/JarvisChu/archive/2010/10/04/2752533.html
当所转的char ch[]是动态添加时,只需将最后一个ch[last] = '\0'; 即可
实例如下:
本例将源字符串sFile中,按自己定义各取出其中的某段(比如各空格之间的字符),组成各个新字符串sEdit[j]。
实例来源:PCR Project operationDlg中的load按键功能函数,实现将之前保存的文件打开,并取出值添加到各编辑框。
CString* sEdit = new CString [enterkeyNum];
for(int i=0; i<enterkeyNum; i++)
sEdit[i].Empty();
unsigned char * cEdit = new unsigned char[cNum+1];
memset(cEdit,0,cNum);
for (int i=0; i<=cNum; i++)
{
if(i == cNum)
cEdit[i] = '\0';
else
cEdit[i] = sFile.GetAt(StartPos+i); // sFile是取字符源字符串
}
// sEdit[j].Format("%s",cEdit); // 这种赋值方式也可以
sEdit[j] = cEdit;