C语言执行 putwchar 出现 Error:: No space left on device

问题: 在 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;
}
错误信息

clipboard.png

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

clipboard.png

请问出现这个问题的原因是什么呢?
阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进