Каково точное значение второго параметра функции ncurses `insnstr`? - PullRequest
0 голосов
/ 14 июля 2020

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

Если использовать libncursesw, что такое n? Это (a) количество байтов, (b) количество кодовых точек (wchar_t), (c) количество графем (cchar_t) или (d) количество экранных столбцов?

(The (d) регистр отличается от случая (c), если какой-то cchar_t имеет ширину Unicode> 1 и занимает несколько столбцов.)

1 Ответ

1 голос
/ 14 июля 2020

Итак, во-первых, оказывается (источник 6.2 ncurses), что insnstr определяется как макрос, вызывающий winsnstr. winsnstr () определена в ncurses / base / lib_insnstr. c. там, внутри USE_WIDEC_SUPPORT, ncurses выполняет mbstowcs, привязанные к n. этот результат передается в wins_nwstr ().

, поэтому кажется, что n в этом контексте ограничивает количество байтов, идущих в mbstowcs (). mbstowcs () требует целых многобайтовых последовательностей (а не прерванных). поэтому в этом контексте n по-прежнему будет означать количество байтов и должно располагаться на многобайтовой границе.

...