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

问题描述 投票:5回答:2

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

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

#include <stdio.h>

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

}

我希望输出为:

©
©

而不是:

©
�
c linux putchar
2个回答
7
投票

putchar函数采用int参数并将其转换为unsigned char来打印它。所以你不能传递多字节字符。

您需要两次调用putchar,一次调用代码点中的每个字节。

putchar(0xc2);
putchar(0xa9);

5
投票

您可以尝试宽版本:putwchar

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

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

int main() {
        setlocale(LC_ALL, "");
        putwchar(L'©');
        return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.