使用 scanf 輸入結構體成員正常,但輸出顯示亂碼。VC6.0 運行正常,Visual Studio 2005 出現問題。
Visual Studio 2005 預設專案編碼為 Unicode(UTF-16),而原始碼檔案可能以 ANSI(GB2312/GBK)儲存。字元編碼不匹配導致中文字元解析錯誤,結構體中 char 陣列存儲的中文資料讀取時解碼錯誤。
#pragma execution_character_set("utf-8")(VS2010+支援)#include <stdio.h>
#include <wchar.h>
#include <locale.h>
struct Student {
wchar_t name[20];
int age;
};
int main() {
setlocale(LC_ALL, ""); // 設定當地環境
struct Student s;
wscanf(L"%ls %d", s.name, &s.age);
wprintf(L"姓名: %ls, 年齡: %d\n", s.name, s.age);
return 0;
}
新專案統一使用 UTF-8 編碼儲存原始碼,配合 char + UTF-8 或 wchar_t + Unicode 一致性處理。避免混合編碼環境,升級至 Visual Studio 2019/2022 獲得更完善的 Unicode 支援。