Readline

readline 的 rl_parse_and_bind 導致崩潰

  • November 1, 2020

我正在使用 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: ");
}

這是因為readline庫將使用主動修改該字元串strtok,而您傳遞的字元串是一個常量。嘗試寫入它會導致分段錯誤。

嘗試:

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

可寫的副本將起作用。

引用自:https://unix.stackexchange.com/questions/617524