在 Visual Studio 2013 專案設定為「使用 Unicode 字元集」時,CString 內部為 wchar_t*(寬字元)。若字串字面值使用單引號 '文字',編譯器視為多字元字元常數,僅取第一個字元,導致「警告 C4066」與字串內容截斷。
CString str = _T('學號:') + ID + _T('姓名:') + Name + _T('\r\n');
// 結果:僅保留每個單引號內的第一個字元
'學號:' 是多字元字元常數,編譯器取第一個字元 '學',其餘被忽略。_T 宏在 Unicode 專案展開為 L 前綴,但單引號仍屬字元常數,非字串字面值。CString str = _T("學號:") + ID + _T("姓名:") + Name + _T("\r\n");
// _T("...") 在 Unicode 專案展開為 L"...",即寬字元字串字面值
\r\n 等轉義序列必須在雙引號字串中才有效,單引號 '\r\n' 同樣屬多字元字元常數,行為未定義。CString 為 char*,雙引號字串同樣適用,單引號仍錯誤。_T("...") 或 L"..." 明確指定寬字元字串,避免字元集切換導致隱性 Bug。_T() 宏?Format(_T("...")) 亦需注意。養成「字串必用雙引號、配合 _T 宏」的習慣,能徹底解決 Unicode/MBCS 切換時的字串編碼問題。