gpt4 book ai didi

c - 使用 printf 打印出一个 unicode 字符

转载 作者:太空狗 更新时间:2023-10-29 17:21:09 24 4
gpt4 key购买 nike

我试图通过将相应的十进制值传递给 printf 来打印出 ş。输出什么都没有。为什么我的代码不起作用?

#include <stdio.h>
int main()
{
printf("%lc",536);
return 0;
}

最佳答案

在带有 GCC 6.3.0 的 macOS Sierra 10.12.2 上,如果我运行这个程序(从 mb37.c 编译成 mb37 ):

#include <locale.h>
#include <stdio.h>
#include <wchar.h> /* wint_t */

int main(void)
{
setlocale(LC_ALL, "");
printf("%lc\n", (wint_t)536);
return 0;
}

输出是:

$ ./mb37
Ș
$

我相信这就是所需的输出。如果setlocale() line 被删除,然后根本没有输出产生 - 甚至没有换行符。使用的语言环境是 en_US.UTF-8 ;我的终端也处理 UTF-8。通过捕获并打印来自 setlocale() 的返回值来找到语言环境名称— 常规字符串。

wint_t cast 是半可选的;碰巧没有强制转换或 <wchar.h> 的 64 位编译header 也产生相同的输出,但有一个轻微的巧合 wint_tint相同.这需要一些跟踪; wint_t定义为 __darwin_wint_t定义为 __darwin_ct_rune_t定义为 int .为了便携正确,强制转换是必要的。在某些系统上,可能没有必要(macOS Sierra 就是这样一种系统)。

printf() 中的换行符不是 100% 必要的,但如果省略,下一个提示将紧跟在 U+0218 拉丁文大写字母 S 之后,下面带有逗号。最好确保输出以换行符结尾。

关于c - 使用 printf 打印出一个 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com