gpt4 book ai didi

c - 在本地开发的 shell 中解析该行无法按预期工作

转载 作者:行者123 更新时间:2023-11-30 14:49:13 24 4
gpt4 key购买 nike

我尝试创建一个 Linux shell,但遇到了一个问题,我读取用户输入,将其存储在字符串数组中,对其进行标记,但我的 args[0] 条件永远不会成立。这是代码

void shell_loop(void)
{
char *line;
char **args;
int status;

do
{
printf("%s","sh1>");
line=read_line();
args=parse_line(line);
status=execute_arguements(args);
} while(status);
}

char * read_line(void)
{
char * line=NULL;
int bufferSize=MAX_SIZE;
getline(&line,&bufferSize,stdin);
return line;
}

char ** parse_line(char * line)
{
int position=0;
char ** tokens=malloc(MAX_SIZE*sizeof(char*));
char * token;

if(!tokens)
{
fprintf(stderr,"failed to allocate memory\n");
exit(EXIT_FAILURE);
}

token=strtok(line," ");

while (token != NULL) {
tokens[position] = token;
position++;
token=strtok(NULL," ");
}
tokens[position] = NULL;
return tokens;
}

int execute_arguements(char ** args)
{
if (args[0] == NULL)
{
return 1;
}

printf("%s\n",args[0]);

if(args[0]=="exit" || args[0]=="^D")
{
exit(EXIT_FAILURE);
}

return 1;

}

无论我在 if 语句中写入什么条件,它都不起作用,例如,如果我写入 exit 或 Ctrl+D ,则不会发生任何情况,因为 if 永远不会为 true 。如果我只是按 Enter args[0]==NULL 为 false,如果我按 exit args[0]=="exit"为 false,即使 prinf("%s",args[0]) 打印 exit 例如。任何人都知道为什么会发生这种情况?提前致谢

最佳答案

我从评论中看到您已采纳 user3121023 的建议,使用 strcmp() 而不是 '==' 进行字符串比较。这是第一个问题。

您无法通过与 control-D 进行比较来测试输入结束。 Control-D 是用户在输入时发出文件结束信号(取决于选项)的一种方式。但该字符不会作为输入的一部分进行传递;相反,输入流被关闭。相反,您需要在调用 getline() 时检查文件结尾,并相应地重组其余部分。

strcmp() 不匹配的原因很可能是因为 getline 返回的输入以换行符结尾。您的 read_line() 函数可能应该从行尾去除所有换行符。

参见http://man7.org/linux/man-pages/man3/getline.3.html

关于c - 在本地开发的 shell 中解析该行无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49806894/

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