readline의 rl_parse_and_bind로 인해 충돌이 발생함

readline의 rl_parse_and_bind로 인해 충돌이 발생함

우분투 18.04.5를 사용하고 있습니다. 이 매우 간단한 프로그램은 호출될 때 segfault를 발생시킵니다 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

복사본은 쓰기 가능하므로 작동합니다.

관련 정보