如何在ncurses c ++中从屏幕上获取文本?

问题描述 投票:0回答:1

我的目标是使用c ++中的ncurses从屏幕上获取文本。为了实现这一点,我正在尝试使用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
c++ ncurses
1个回答
0
投票

mvinstr()的第三个参数是一个指向字符缓冲区的指针,该字符缓冲区足够大,可以写入字符串。

分配缓冲区并传递有效的字符指针是您的责任。由于您没有将str分配给任何缓冲区,因此这是未定义的行为。 mvinstr()最终通过初始化指针写入,破坏随机区域的内存,导致崩溃。

既然您知道终端屏幕的宽度,您可以创建一个std::vector<char>resize()它足够大以容纳字符串(加上一个尾随的'\0'字符),并将指针传递给std::vector中的第一个字符到mvinstr()。之后,您可能希望从角色向量构建您的std::string

或者,您可以使用1个字符的固定大小缓冲区,并使用mvinnstr()一次提取一个字符。

© www.soinside.com 2019 - 2024. All rights reserved.