我使用的是 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
副本是可写的,因此可以工作。