【问题标题】:Print a wide unicode character with ncurses使用 ncurses 打印一个宽 unicode 字符
【发布时间】:2017-10-05 16:47:36
【问题描述】:

我正在尝试在 Ubuntu 上使用 C 中的 ncurses.h 库在屏幕上定位星形 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();
}

但我不断收到错误

implicit declaration of function ‘mvaddwstr’ [-Wimplicit-function-declaration]

尽管这个函数有很好的文档here 以及我也无法使用的类似函数。是否有一些我不包括在内的图书馆来完成这项工作?还是有其他方法可以显示这个角色?感谢您的帮助。

【问题讨论】:

标签: c unicode ncurses


【解决方案1】:

您必须针对“窄”诅咒进行编译(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

然后

./main

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

-    const wchar_t* star = L"0x2605";
+    const wchar_t* star = L"\x2605";

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 2018-07-06
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多