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

C++ char 陣列無法輸入中文的根本原因與三種解決方案

     編輯:程式設計綜合問答

問題現象

cin >> name[10]; 僅讀取單一 char(1 byte),中文編碼(UTF-8/GBK)至少佔 2~3 bytes,導致截斷或亂碼。

根本原因

  • char name[10] 是 10 個位元組陣列,name[10] 是第 11 個元素(越界)。
  • cin >> name 遇空白斷字,且不支援多位元組字元正確寫入。

三種解決方案

  1. 改用 std::string + std::getline(現代 C++ 推薦):
    std::string name;
    std::getline(std::cin, name); // 可讀含空白的完整行,支援 UTF-8
    
  2. 使用寬字元 wchar_t / std::wstring(Windows 相容):
    std::wstring name;
    std::wcin >> name; // 需設定 locale: std::setlocale(LC_ALL, "");
    
  3. 保留 char 陣列但正確讀取:
    char name[50];
    std::cin.getline(name, 50); // 讀整行,含中文位元組序列
    

編碼一致性提醒

原始碼檔案編碼、終端機編碼、資料庫/檔案編碼必須一致(建議全端 UTF-8),否則仍會出現亂碼。

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