很多網友給的CString 轉char *的方式如下:
CString str=_T("abcdf");
char *ptr=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
ptr得到的是a;
各種煩惱,最后本人自己寫了一段代碼,如下:
CString str=_T("abcdf");char *des=new (std::nothrow)char[str.GetLength()];int i=0;for (;i<str.GetLength();i++){*(des+i)=str.GetAt(i);}*(des+i)='/0';
des得到的是abcdf。
本以為解決了問題,但是如果CString中有中文(在vs2010中,項目-->項目屬性--->配置屬性--->常規中的字符集使用的是“使用 Unicode 字符集”),上面的代碼會出現中文亂碼,有網友的解決方案是把字符集改為“使用多字節字符集”還是不能解決問題。最后使用如下代碼:
CString str=_T("abcdf中文測試123");
char buf[16];wchar_t *ptr;ptr=str.GetBuffer(str.GetLength()*sizeof(wchar_t));WideCharToMultiByte(CP_ACP, 0, (LPCTSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);str.ReleaseBuffer();
buf的內容是abcdf中文測試123,這里buf的空間不太好把握,但是至少要比str的長度大。
(注意把char *buf=new char[str.GetLength()*sizeof(wchar_t)]是不行的)
新聞熱點
疑難解答