我正在尝试使用C语言在Linux终端中打印一个Unicode星形字符(0x2605),我按照网站上其他答案提供的语法进行操作,但是没有输出:
#include <stdio.h>
#include <wchar.h>
int main(){
wchar_t star = 0x2605;
wprintf(L"%c\n", star);
return 0;
}
我会感激任何建议,特别是如何让这个与ncurses
库一起使用。
有两个问题: 首先,wchar_t
必须使用 %lc
格式打印,而不是 %c
。其次,除非您调用了 setlocale
,否则字符集未正确设置,您可能会得到 ?
而不是您的星号。以下代码似乎可以正常工作:
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, "");
wchar_t star = 0x2605;
wprintf(L"%lc\n", star);
}
对于ncurses
,只需在调用initscr
之前初始化语言环境。
ncurses
来进行 mvwprint
? - Luke Collinsncurses
函数时遇到了 隐式声明 错误,是否需要包含其他库? - Luke Collins#define
。通常应该是 _XOPEN_SOURCE_EXTENDED
,但大多数平台都有混乱的 ifdef:对于 Linux,只需使用 -D_GNU_SOURCE
。你需要链接 -lncursesw
,但这不是隐式声明。 - Thomas Dickeyncursesw5-config --cflags
进行定义,或者通过 ".pc" 文件进行定义,具体取决于 ncurses 在您的系统上的打包方式。 - Thomas Dickey
0x0061
的a
,但无法打印值为0x01ce
的ǎ
。 - Luke Collins