簡體   English   中英

[msys2][gcc] 使用 MSys2 的 gcc 10.2 編譯的 wprintf() 的 output 錯誤

[英][msys2][gcc] Wrong output of wprintf() compiling with MSys2's gcc 10.2

我需要使用 MSys2 的 gcc 工具鏈讓這個精簡的 C 程序在 Windows 7 上運行:

#include <stdio.h>

void wmain(int argc, wchar_t *argv[])
{
   for (int i = 1; i < argc; i++)
      wprintf(L"%s\n", argv[i]);
}

代碼編譯為

gcc -Wall -municode -O2 -march=x86-64 -m64 test.c

但給了我以下 output

>> ./a.exe kk лл
k   (!)
:?:?

我有以下問題:

  1. 我究竟做錯了什么?
  2. 我如何將編譯器降級到版本,比如 9.x 或 10.1? (我的印象是大約一年前編譯的同一個程序曾經可以正常工作)

編輯 [1]:同時我設法使用 gcc 9.3 設置了一個新的 MSys2 環境。 “錯誤”仍然存在,所以它不是編譯器。

編輯[2]:“一些程序員老兄”(cmp. 下面)描述了“立即”解決方案(THX。)。

即使對於寬字符wprintf ,格式%s也適用於字符串。

您需要使用%ls打印寬字符串:

 wprintf(L"%ls\n", argv[i]);

然而,這可能仍然不夠,因為輸入(包括參數)的實際編碼可能不是預期的。 您需要考慮程序運行的終端使用的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM