我的目标是使用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
mvinstr()
的第三个参数是一个指向字符缓冲区的指针,该字符缓冲区足够大,可以写入字符串。
分配缓冲区并传递有效的字符指针是您的责任。由于您没有将str
分配给任何缓冲区,因此这是未定义的行为。 mvinstr()
最终通过初始化指针写入,破坏随机区域的内存,导致崩溃。
既然您知道终端屏幕的宽度,您可以创建一个std::vector<char>
,resize()
它足够大以容纳字符串(加上一个尾随的'\0'
字符),并将指针传递给std::vector
中的第一个字符到mvinstr()
。之后,您可能希望从角色向量构建您的std::string
。
或者,您可以使用1个字符的固定大小缓冲区,并使用mvinnstr()
一次提取一个字符。