使用 ncurses 打印宽 unicode 字符

Luk*_*ins 5 c unicode ncurses

我正在尝试使用ncurses.hUbuntu 上的 C 库在屏幕上放置一个星形 unicode 字符。我试图运行的代码如下:

#include <stdio.h>
#include <wchar.h>
#include <curses.h>
#include <ncurses.h>
#include <stdlib.h>
#include <wctype.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "");

    initscr();
    cbreak();

    WINDOW *win = newwin(0, 0, 0, 0);
    refresh();
    wrefresh(win);

    const wchar_t* star = L"0x2605";
    mvaddwstr(3, 3, star);

    getch();
    endwin();
}
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误

implicit declaration of function ‘mvaddwstr’ [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

尽管此功能与类似的功能一起在这里得到了很好的记录,但我也无法开始工作。是否有一些我不包括在内的图书馆来完成这项工作?或者有没有其他方法来显示这个角色?我很感激任何帮助。

Ant*_*ile 5

您必须针对“窄”诅咒(ncurses vs ncursesw)进行编译

我能够使用以下内容在 ubuntu 16.04 上编译您的示例:

apt install libncursesw5-dev

# --cflags expanded to: -D_GNU_SOURCE -I/usr/include/ncursesw
gcc main.c $(ncursesw5-config --cflags) -c
# --libs expanded to: -lncursesw -ltinfo
gcc main.o $(ncursesw5-config --libs) -o main
Run Code Online (Sandbox Code Playgroud)

进而

./main
Run Code Online (Sandbox Code Playgroud)

我还必须对您的示例代码进行以下差异:

-    const wchar_t* star = L"0x2605";
+    const wchar_t* star = L"\x2605";
Run Code Online (Sandbox Code Playgroud)