readline 的 rl_parse_and_bind 导致崩溃

readline 的 rl_parse_and_bind 导致崩溃

我使用的是 Ubuntu 18.04.5。这个非常简单的程序在调用时出现段错误rl_parse_and_bind。谁能帮我?

// Build with cc read.c -o read -lreadline

#include <readline/readline.h> // apt install libreadline-dev

int main() {
    rl_parse_and_bind("\"C-b\":history-search-backward");
    char *input = readline("Input: ");
}

答案1

这是因为readline图书馆将积极修改该字符串使用strtok,以及您传递的字符串是一个常数。尝试写入它会导致分段错误。

尝试:

char *copy = strdup("\"C-b\":history-search-backward");
rl_parse_and_bind(copy);
// free(copy); copy = NULL; // This to tidy up things

副本是可写的,因此可以工作。

相关内容