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

时间:2019-03-02 15:02:07

标签: c++ ncurses

我的目标是在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

1 个答案:

答案 0 :(得分:0)

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

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

由于您知道终端屏幕的宽度,因此可以创建一个std::vector<char>resize(),使其足够容纳字符串(加上结尾的'\0'字符),并将指向std::vectormvinstr()的第一个字符的指针。然后,您可能希望根据字符向量构造std::string

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