微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[msys2][gcc] 使用 MSys2 的 gcc 10.2 编译 wprintf() 的错误输出

如何解决[msys2][gcc] 使用 MSys2 的 gcc 10.2 编译 wprintf() 的错误输出

我需要使用 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

但给了我以下输出

>> ./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]);

然而,这可能仍然不够,因为输入(包括参数)的实际编码可能不是预期的。您需要考虑程序运行所在终端使用的编码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。