A chtype
содержит символьные и атрибутивные данные. Задав для chtype
значение COLOR_PAIR(COLOR_RED)
, вы устанавливаете атрибутные данные, а не символьные данные, фактически инициализируя символьные данные равными 0
.
В наборе символов ASCII код символа 0
соответствует символу NULL, обычно используемому для завершения строк в C.
Теперь поймите, что это непечатаемый символ, и поэтому он представлен двумя символами в текстовом представлении: ^@
.
addch
и друзья работают на более высоком уровне абстракции, чем простые поля, которые вы получили в своем терминале, они работают с символами, включая непечатные символы.
С man curs_addch
:
Если ch
является любым [не пробельным] управляющим символом, он отображается в ^X
нотации.
Вызов winch
после добавления управляющего символа не возвращает
сам символ, но вместо этого возвращает ^
-представление управляющего символа.
Поскольку ncurses видит, что COLOR_PAIR(RED)
содержит код символа 0
, ncurses интерпретирует его как непечатаемый символ и печатает его соответственно, один символ в двух полях.