Как получить текст с экрана в ncurses c ++? - PullRequest
0 голосов
/ 02 марта 2019

Моя цель - получить текст с экрана, используя ncurses в c ++.Чтобы добиться этого, я пытаюсь использовать функцию mvinstr (), но у меня возникают проблемы с получением правильных аргументов - в основном это char * str.Я предполагаю, что все это сводится к моему неправильному использованию указателей, так как я получаю ошибку ошибки сегментации.Буду очень признателен, если скажу, что не так с моим подходом.Вот ссылка на справочную страницу: https://linux.die.net/man/3/winstr.

mvaddstr(1, 1, "text");

char *str;
mvinstr(1, 1, str); 

mvprintw(2, 1, str); //expected output: text

1 Ответ

0 голосов
/ 02 марта 2019

Третий параметр mvinstr() - это указатель на буфер символов, достаточно большой для записи строки.

Вы отвечаете за выделение буфера и передачу действительного указателя символов.Поскольку вы не выделяли str для указания на какой-либо буфер, это неопределенное поведение.mvinstr() заканчивает запись через инициализированный указатель, повреждая случайную область памяти, что приводит к сбою.

Поскольку вы знаете ширину экрана терминала, вы можете создать std::vector<char>, resize()он должен быть достаточно большим, чтобы вместить строку (плюс завершающий символ '\0') и передать указатель на первый символ в std::vector до mvinstr().После этого вы можете создать std::string из вектора символов.

В качестве альтернативы вы можете использовать буфер фиксированного размера, состоящий из 1 символа, и использовать mvinnstr() для извлечения одного символа за раз.

...