`insnstr` ncurses 函数的第二个参数的确切含义是什么?

What is the exact meaning of the second parameter of the `insnstr` ncurses function?

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

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

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

所以首先,insnstr 似乎(6.2 ncurses 源)被定义为调用 winsnstr 的宏。 winsnstr() 在 ncurses/base/lib_insnstr.c 中定义。在那里,在 USE_WIDEC_SUPPORT 守卫中,ncurses 执行由 n 绑定的 mbstowcs。结果被输入 wins_nwstr().

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