最近在做MFC相關的東西
遇到CString to char真的很麻煩
方法1
size_t i;
char str[STR_LEN];
// STR_LEN 大小自己決定, 其實可以改宣告為 char*, 然後在下面取得 cStr 長度之後再 allocate 相對應的大小
int sizeOfString = (cStr.GetLength() + 1); // 取得 cStr 長度, +1 for '\0'.
// LPTSTR 型態是 wchar_t*, 一個 element 2 bytes 大小.
LPTSTR pStrTmp = new TCHAR[sizeOfString];
_tcscpy_s(pStrTmp, sizeOfString, cStr); // 用 _tcscpy_s 複製 cStr
// str 型態是 char, 一個 element 1 byte 大小, 用 wcstombs_s 轉換 pStrTmp.
wcstombs_s(&i, str, 16, pStrTmp, 16);
方法1 筆者在使用時發生trace 不到 wcstombs_s來源 筆者的編輯環境為VS2005
因此將 wcstombs_s 轉用 wcstombs
改寫為 wcstombs
其中內容: wcstombs(char *mbstr, const wchar_t *wcstr, size_t count);
mbstr 為CString轉換後欲存放的char變數,方法1中的str
wcstr為方法1中的pStrTmp
size_t count 轉換的size
這樣就可以順利轉換了
方法2 其實也算是將方法1改寫 改成以function來表達 程式碼如下
char* CRadiotestDlg::CStringToChar(CString cStr)
{
char str[40];
int sizeOfString = (cStr.GetLength() + 1);
LPTSTR pStrTmp = new TCHAR[sizeOfString];
_tcscpy_s(pStrTmp, sizeOfString, cStr);
wcstombs(str, pStrTmp,sizeOfString);
return str;
}
改寫成function好處是可重複利用 較為便利
沒有留言:
張貼留言