【问题标题】:What is the exact meaning of the second parameter of the `insnstr` ncurses function?`insnstr` ncurses 函数的第二个参数的确切含义是什么?
【发布时间】:2020-07-14 14:28:28
【问题描述】:

int insnstr(const char *str, int n);

假设libncursesw使用,n是什么?是 (a) 字节数、(b) 代码点 (wchar_t) 数、(c) 字形 (cchar_t) 数还是 (d) 屏幕列数?

(如果某些 cchar_t 的 unicode 宽度 > 1 并占用多列,则 (d) 情况与 (c) 情况不同。)

【问题讨论】:

    标签: unicode ncurses


    【解决方案1】:

    首先,看起来(6.2 ncurses 源代码)insnstr 被定义为调用winsnstr 的宏。 winsnstr() 在 ncurses/base/lib_insnstr.c 中定义。在那里,在 USE_WIDEC_SUPPORT 守卫内,ncurses 执行由 n 绑定的 mbstowcs。该结果被输入到 wins_nwstr() 中。

    因此,在这种情况下,n 似乎限制了进入 mbstowcs() 的字节数。 mbstowcs() 想要整个多字节序列(不是中断的)。所以在这种情况下,n 似乎仍然表示字节数,并且应该出现在多字节边界上。

    【讨论】:

    • 我被提示,mbstowcs 需要 wchar_t 计数!因此, insnstr 也是如此。 (我相信,这是非常丑陋的 API 决定。)无论如何,即使是这个形式上错误的答案也让我成功了。但是你可以改变它,让它变得更好。
    猜你喜欢
    • 2019-07-30
    • 2016-03-25
    • 2011-12-06
    • 1970-01-01
    • 2010-11-29
    • 2020-12-23
    • 2021-04-06
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多