输出unicode wchar_t字符

cdo*_*nts 2 c unicode mingw

只是尝试使用 MinGW 在 C 中输出这个 unicode 字符\xe2\x98\x92。我首先使用 将其放在缓冲区中swprintf,然后使用 将其写入标准输出wprintf

\n\n
#include <stdio.h>\n\nint main(int argc, char **argv)\n{\n    wchar_t buffer[50];\n    wchar_t c = L\'\xe2\x98\x92\';\n\n    swprintf(buffer, L"The character is: %c.", c);\n    wprintf(buffer);\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Windows 8下的输出是:

\n\n
\n

角色是: 。

\n
\n\n

其他字符如也\xc6\x94不起作用。

\n\n

我做错了什么?

\n

Die*_*Epp 5

您正在使用%c, 但%cis for char,即使您使用 from wprintf()。使用%lc,因为参数是whar_t.

swprintf(buffer, L"The character is: %lc.", c);
Run Code Online (Sandbox Code Playgroud)

这种错误通常应该被编译器警告捕获,但它并不总是发生。特别是,捕获此错误非常棘手,因为%c%lc 实际上都采用int参数,而不是charwchar_t(区别在于它们如何解释int)。