请考虑以下简单代码段:
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <stdbool.h>
#include <signal.h>
void cleanup(int signal)
{
endwin();
exit(0);
}
int main()
{
initscr();
struct sigaction cleanup_action = { .sa_handler = cleanup, .sa_flags = 0 };
sigfillset(&cleanup_action.sa_mask);
sigaction(SIGINT, &cleanup_action, NULL);
cbreak();
keypad(stdscr, TRUE);
noecho();
mvaddstr(2, 2, "?");
mvaddstr(2, 3, "?");
mvaddstr(2, 4, "?");
mvaddstr(3, 2, "⬜");
mvaddstr(3, 2, "⚾");
mvaddstr(3, 4, "⬜");
refresh();
while(true) getch();
return 0;
}
(不,我不确定我的出口清理是否正确,但这不是重点。)
为什么表情符号没有被打印出来?
当我运行该程序时,我会看到:
���~_��
�~��~\
我不明白这是因为according to POSIX specification:
他们说addnstr,addstr,mvaddnstr,mvaddstr,mvwaddnstr,mvwaddstr waddnstr,waddstr-将多字节字符字符串(不带移译)添加到窗口并前进光标
“ MULTI-BYTE” !因此,我认为这应该正确打印!我不仅限于ASCII!
此外,我想我的终端可以处理这些字符。这是因为与curses.h
相比,stdio.h
能够正确打印它们:
#include <stdio.h>
int main()
{
printf("?⬜⚾\n");
return 0;
}
打印输出:
?⬜⚾
如何使用curses.h
打印表情符号?