![readline 的 rl_parse_and_bind 导致崩溃](https://linux22.com/image/182669/readline%20%E7%9A%84%20rl_parse_and_bind%20%E5%AF%BC%E8%87%B4%E5%B4%A9%E6%BA%83.png)
我使用的是 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
副本是可写的,因此可以工作。