为什么putchar()没有putchar()输出版权符号?

ana*_*ari 5 c linux putchar

所以我想要打印版权符号,而putchar()只是截断字符中最重要的字节,从而产生一个不可打印的字符.

我使用的是Ubuntu MATE,我使用的编码是en_US.UTF-8.现在我所知道的是©的十六进制值是0xc2a9,当我尝试putchar('©' - 0x70)时,它给了我9,它的十六进制值为0x39,加上0x70,你将得到0xa9,这是最少的0xc2a9的有效字节

#include <stdio.h>

main()
{
    printf("©\n");
    putchar('©');
    putchar('\n');

}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

©
©
Run Code Online (Sandbox Code Playgroud)

而不是:

©
?
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 7

putchar函数接受一个int参数并将其强制转换unsigned char为打印它.所以你不能传递多字节字符.

您需要为putchar代码点中的每个字节调用两次.

putchar(0xc2);
putchar(0xa9);
Run Code Online (Sandbox Code Playgroud)


Zan*_*ynx 5

你可以尝试宽版本: putwchar

编辑:这实际上比我想象的要困难.这就是我需要它使它工作:

#include <locale.h>
#include <wchar.h>
#include <stdio.h>

int main() {
        setlocale(LC_ALL, "");
        putwchar(L'©');
        return 0;
}
Run Code Online (Sandbox Code Playgroud)