MFC中CString转换成char数组的问题
由于結(jié)構(gòu)體中用到聯(lián)合體(聯(lián)合體需要確定分配內(nèi)存分配大小)或其它因素,需要用char數(shù)組來保存字符串,但是在MFC中一般都是用CString來存放字條串。關(guān)于它們之間的轉(zhuǎn)換,在VS2008中有時會出現(xiàn)異常情況。在MSDN是這樣寫的:
??? CString orig("Hello, World!");
??? // Convert to a char*
??? const size_t newsize = 100;
??? char nstring[newsize];
??? strcpy_s(nstring, orig);
??????? 但在實際應(yīng)用中,并不能通過,總會在strcpy_s()函數(shù)中出錯,或者在nstring的后面跟著很多亂碼尾巴。在網(wǎng)上查閱了一些方法。如下:
方法一:
char *p;
CString str="hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
方法二:
CString str="hello";
char ch[20];
memcpy(ch,str,str.GetLength());
方法三:
char *ch;
CString str="hello";
ch=(LPSTR)(LPCTSTR)str;
但總達(dá)不到期望的結(jié)果。隨后再在網(wǎng)上查,發(fā)現(xiàn)是Unicode字符集的問題。選擇項目->項目屬性(或直接按alt+F7)->配置屬性,在右邊找到“字符集”,將“使用Unicode字符集”改為“使用多字節(jié)字符集”。保存之后需要重新生成解決方案。這樣上面的方法都可以通過并實現(xiàn),但是在方法二中,最好不要使用memcpy,直接用strcpy_s(char*, CString)就可以了,因為用memcpy也會出現(xiàn)亂碼尾巴。
如果不想改變Unicode字符集,網(wǎng)上也有介紹方法,但我沒有試過,在此列出來供網(wǎng)友們參考:
CString strPath = L"adfafs主聲音文件fsfsa";
int nLength = strPath.GetLength();
int nBytes = WideCharToMultiByte(CP_ACP,0,strPath,nLength,NULL,0,NULL,NULL);
char* VoicePath = new char[ nBytes + 1];
memset(VoicePath,0,nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, strPath, nLength, VoicePath, nBytes, NULL, NULL);
VoicePath[nBytes] = 0;
總結(jié)
以上是生活随笔為你收集整理的MFC中CString转换成char数组的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到吃草莓是什么意思啊
- 下一篇: 梦到鸡蛋汤是什么意思