Я пытаюсь реализовать автозаполнение и историю в моей оболочке, используя библиотеку GNU Readline.Я использовал fgets()
для извлечения пользователя и после прочтения о том, как работает функция readline
, я решаю использовать ее для поддержки автоматического завершения и т. Д. Но когда я выполняю свою программу, функция readline
выводит странные символыоболочка, прежде чем я даже ввести любой ввод.Странные результаты, такие как P�6
, PJ�
`,
P� # ,
P�s`.По какой-то причине это всегда начинается с P. Вот мой код:
int main(int argc, char* argv[]) {
char *historic, userInput[1000];
static char **cmdArgv;/**The argv of the main*/
sa.sa_handler = handle_signal;
sigaction(SIGINT, &sa, NULL);
sa.sa_flags = SA_RESTART; /** Restart function incase it's interrupted by handler */
cmdArgv = malloc(sizeof (*cmdArgv));
welcomeScreen();//just printf's nothing special
while(TRUE)
{
shellPrompt();// getcwd function
historic = readline(userInput);
if (!historic)
break;
//path autocompletion when tabulation hit
rl_bind_key('\t', rl_complete);
//adding the previous input into history
add_history(historic);
if( check_syntax(userInput) == 0 ){
createVariable(userInput);
}
else{
tokenize(cmdArgv, userInput);
special_chars(cmdArgv);
executeCommands(cmdArgv, userInput);
}
}
Есть идеи относительно проблемы?Спасибо.