问题: 在 Windows 环境下使用 MinGW 编译后运行以下代码出现了错误
#include <error.h>
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
void PutToConsole(const wchar_t *wstr) {
int wstr_len = wcslen(wstr);
for (int i = 0; i < wstr_len; ++i) {
if (WEOF == putwchar(wstr[i])) {
perror("Error:");
}
}
}
int main(int argc, char* argv[]) {
setlocale(LC_ALL, "");
wchar_t* wstr = L"宽字符测试";
PutToConsole(wstr);
wprintf(L"%ls", wstr);
getchar();
return 0;
}
错误信息

编译指令
gcc -o test -finput-charset=UTF-8 -fexec-charset=GBK -std=c99 -g test.c
如果将输出单个字符的函数换成以下代码就没有问题。
wprintf(L"%ls", wstr[i]);
同时如果是用 VS 的 CL 编译器的话也没有问题:

请问出现这个问题的原因是什么呢?