gpt4 book ai didi

c - C 中的 readline 函数输出奇怪的结果

转载 作者:太空狗 更新时间:2023-10-29 12:06:55 25 4
gpt4 key购买 nike

我正在尝试使用 GNU Readline 库在我的 shell 中实现自动完成和历史记录。我正在使用 fgets() 来检索用户,在阅读了 readline 函数的工作原理后,我决定使用它来支持自动完成等。但是当我执行在我的程序中,readline 函数在我键入任何输入之前就在 shell 上输出奇怪的字符。奇怪的结果,例如 P�6PJ� `、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);
}
}

关于问题是什么的任何想法?谢谢。

最佳答案

在将 userInput 传递给 readLine() 之前初始化它:

memset(userInput, 0, sizeof(userInput));

这是传递给 readLine() 函数的参数的描述(我在这里找到 man readline ):

如果参数为 NULL 或空字符串,则不会发出提示。

因为您还没有初始化 userInput,所以它会显示那里发生的任何事情。

关于c - C 中的 readline 函数输出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8348763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com