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

C語言結構體輸入輸出亂碼問題:VS2005編碼解決方案

     編輯:C 語言問答

問題現象

使用 scanf 輸入結構體成員正常,但輸出顯示亂碼。VC6.0 運行正常,Visual Studio 2005 出現問題。

根本原因

Visual Studio 2005 預設專案編碼為 Unicode(UTF-16),而原始碼檔案可能以 ANSI(GB2312/GBK)儲存。字元編碼不匹配導致中文字元解析錯誤,結構體中 char 陣列存儲的中文資料讀取時解碼錯誤。

解決方案

方法一:設定 VS2005 自動偵測編碼

  1. 工具 → 選項 → 文字編輯器 → 所有語言 → 一般
  2. 勾選「自動偵測 UTF-8 編碼,無簽章」
  3. 重新開啟專案檔案

方法二:統一原始碼編碼為 UTF-8 with BOM

  • 使用 Notepad++ 或 VS Code 另存為「UTF-8 with BOM」
  • 或在原始碼開頭添加 #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;
}

方法四:專案屬性設定字元集

  • 專案 → 屬性 → 組態屬性 → 一般 → 字元集
  • 選擇「使用多位元組字元集」而非 Unicode

最佳實踐建議

新專案統一使用 UTF-8 編碼儲存原始碼,配合 char + UTF-8 或 wchar_t + Unicode 一致性處理。避免混合編碼環境,升級至 Visual Studio 2019/2022 獲得更完善的 Unicode 支援。

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