将GNU readline提示设置为NULL会导致自定义提示被覆盖

时间:2015-05-23 05:11:56

标签: c readline

我在c中编写了一个自定义shell,遇到了一个奇怪的小bug,可以在下面的测试用例中看到:

#include <stdio.h>
#include <stdbool.h>

#include <readline/readline.h>
#include <readline/history.h>

int main(int argc, char **argv, char **env) {
  while(true) {
    fprintf(stdout, "input: ");
    char *line = readline(NULL);

    if(line) {
      add_history(line);
    }
  }
  return 0;
}

程序吐出提示,如果我输入这样的内容:

input: foo bar baz

然后去擦除线,输入:也被擦除(一旦我击中我输入的第一个字符)。有没有什么办法解决这一问题?我唯一能想到的就是fflush(stdout),但这不起作用。

1 个答案:

答案 0 :(得分:1)

告诉pox提示:

readline()

当您自己进行提示时,#include <readline/readline.h> #include <readline/history.h> int main(void) { char *line; while ((line = readline("input: ")) != 0) add_history(line); return 0; } 不知道提示的存在,因此在您删除输入的最后一个字符时错误地重新绘制线条(将光标移回到开头线)。当它知道提示时,它不会删除它。