首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2013 C++ CString 寬字元字串常見錯誤:單引號與雙引號的差異

     編輯:程式設計綜合問答

在 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' 同樣屬多字元字元常數,行為未定義。
  • 若專案設定為「多位元組字元集」(MBCS),CString 為 char*,雙引號字串同樣適用,單引號仍錯誤。
  • 建議專案統一使用 _T("...") 或 L"..." 明確指定寬字元字串,避免字元集切換導致隱性 Bug。

快速檢查清單

  1. 所有字串字面值是否使用雙引號?
  2. 是否對所有使用者可見字串套用 _T() 宏?
  3. 格式化字串 Format(_T("...")) 亦需注意。

養成「字串必用雙引號、配合 _T 宏」的習慣,能徹底解決 Unicode/MBCS 切換時的字串編碼問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved