Ubuntu 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
コピーは書き込み可能なので動作します。