使用UNICODE字符集時候TCHAR和char賦值時的不同
阿新 • • 發佈:2019-01-11
1、關於TCHAR型別查閱MSDN發現
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
上面程式碼說白了就是:如果程式使用UNICODE字符集,則TCHAR代表WCHAR,否則代表char。由於現在我們編寫Windows程式通常都是用UNICODE字符集,所以就姑且把它當成WCHAR型別。
2、關於WCHAR型別查閱MSDN發現
typedef wchar_t WCHAR;
原來WCHAR型別在MFC中其實就是C++寬字元型別的另一個名字而已。wchar_t的變數在C++中初始化和賦值需要加L。例如,要對wchar_t變數初始化賦值,程式碼如下所示。
wchar_t weekDay[8] = {L'日', L'一', L'二', L'三', L'四', L'五', L'六'}; // 和char不同的是每個字元前面要加L,表示為寬字元
如果要對wchar_t型別字串賦值當然也需要加L,程式碼如下所示。
wchar_t weekDay[] = L"日一二三四五六"; // 字串陣列初始化賦值和char型別也不同,前面需要加L
3、在使用UNICODE字符集的MFC程式中用%c對CString型別進行格式化
CString strTmp;
strTmp.Format(_T("星期%c"), weekDay[nWeek]);
如果weekDay使用char型別,上面程式碼不會出現編譯錯誤。但是最後得到的只是亂碼。_T()想必都已經熟悉了,CString型別預設使用UNICODE字符集。所以如果在MFC使用TCHAR型別,它和char型別在使用上唯一不同的是就是得加L進行初始化和賦值。