【发布时间】:2021-11-07 21:47:26
【问题描述】:
在我的 C 程序中,我使用printf 将格式化字符串打印到stdout,然后使用readline 从用户那里获取输入,并能够移动光标和浏览历史记录。问题是如果我输入一个字符然后按退格键,整行,包括printf 打印的字符串,都会被删除。有没有办法解决这种不良行为?我应该将此作为错误报告给readline 开发人员吗?还是应该将格式化文本打印到缓冲区,然后将其用作readline 的提示?
类似代码的示例:
...
printf("Some formatted text",...);
foo(buffer,length);
....
在 foo 里面:
{
...
temp=readline(NULL);
//Checking length...
...
strcpy(buffer,temp);
free(temp);
....
}
【问题讨论】:
-
这可能是由于您的终端的键映射。见man 3 readline。默认情况下,行编辑命令类似于emacs的...
-
您无法打印到 readline 的输入。这不是标准输入和标准输出的工作方式。输入就是输入,输出就是输出。没有环回。但是,如果您在回调中这样做,您可以使用 readline 函数将文本插入到 readline 缓冲区中。请参阅stackoverflow.com/a/33346124/1566221,我认为它符合重复的条件。
-
我不打算使用 printf 打印到 readline 输入。 printf 打印到标准输出和 readline 应该从标准输入读取?为什么退格允许 readline 删除 printf 写入标准输出的内容?我会检查手册页。
-
我通过将格式化文本写入字符数组然后将其传递给 readline 的提示参数来解决此问题。我更新了描述,因为它有点令人困惑@rici
-
提示不可编辑。