但很多方法其實在vs2010下是不湊效的,他們說的大部分方法都是在VC6.0下的轉換。而在VS2010的Unicode默認編程環境下,
經過試了N回之後還是不成功之後,會令你心煩意亂。下面是網上列舉的一些轉換的方法:CString轉char*,如:
char * a = (LPSTR)(LPCTSTR)name; //name類型爲CString
char * a =s name.GetBuffer(name.GetLength());
第一種方法在VS2010下他們不會報錯,你會發現你可能得不到預期的結果,具體原因不說,自己搜了,網上很多。
第二種方法會報錯如: error C2440: “=”: 無法從“wchar_t *”轉換爲“char *”;所以還是失敗了。
網上也沒有好的簡潔的方法,只有自己寫函數了,一個通用的比較好的函數,是既能將Cstring轉成char * 又能將其轉換爲const char *,
只需稍微修改即可
函數1:CString轉換爲char*
- char* CStrToChar(CString strSrc)
- {
- #ifdef UNICODE
- DWORD dwNum = WideCharToMultiByte(CP_OEMCP, NULL, strSrc.GetBuffer(0), -1, NULL, 0, NULL, FALSE);
- char *psText;
- psText = new char[dwNum];
- if (!psText)
- delete []psText;
- WideCharToMultiByte(CP_OEMCP, NULL, strSrc.GetBuffer(0), -1, psText, dwNum, NULL, FALSE);
- return psText;
- #else
- return (LPCTSRT)strSrc;
- #endif
- }
轉換成const char * 的
都是比較通用的,在強制轉換不湊效的情況下,利用它們來轉換還是很很有效的!!只是存在一些缺點。存在缺點:因爲返回的的是動態分配的數組,所以會有內存泄露的危險,
還需進一步改進!!!
可以直接作爲函數參數將CString變量進行直接轉換,但這樣就不能在使用完之後對其佔用的內存空間進行有效的釋放,
可以這樣使用:
但不能這樣用:
正確的用法就是先將轉換後的值賦給一個char *變量,在函數用完之後,釋放由char* 變量指向的內存。函數2:CString轉換爲char
下面是用法:
其實函數2更像是將CString變量轉換爲char變量,然後由char*變量指向char變量,所以,
缺點:指定字符數組大小BUFFER_SIZE,但其不用考慮內存泄露的問題,所以,
在CString變量不是很大的情況下,可以考慮。