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