gpt4 book ai didi

命令解析 UNIX shell C

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:11 24 4
gpt4 key购买 nike

我试图创建一个程序,在其中我可以将用户输入的命令和参数解析为特定数组(这些命令和参数将执行诸如“ls”、“ls -l”、“ls -l | wc”之类的命令"但是,我在解析时遇到了问题:

        //Split the command and store each string in parameter[]
cp = (strtok(command, hash)); //Get the initial string (the command)
parameter[0] = (char*) malloc(strlen(cp)+ 1); //Allocate some space to the first element in the array
strncpy(parameter[0], cp, strlen(cp)+ 1);
for(i = 1; i < MAX_ARG; i++)
{
cp = strtok(NULL, hash); //Check for each string in the array
parameter[i] = (char*) malloc(strlen(cp)+ 1);
strncpy(parameter[i], cp, strlen(cp)+ 1); //Store the result string in an indexed off array
if(parameter[i] == NULL)
{
break;
}
if(strcmp(parameter[i], "|") == 0)
{
cp = strtok(NULL, hash);
parameter2[0] = (char*) malloc(strlen(cp)+ 1);
strncpy(parameter2[0], cp, strlen(cp)+ 1);
//Find the second set of commands and parameters
for (j = 1; j < MAX_ARG; j++)
{
cp = strtok(NULL, hash);
if (cp == NULL)
{
leave = 1;
break;
}
else
{
parameter2[j] = (char*) malloc(strlen(cp)+ 1);
strncpy(parameter2[j], cp, strlen(cp)+ 1);
}

}
}
if (leave == 1)
{
break;
}
}

我在执行 if (strlen(cp) == NULL) 时遇到问题,存在段错误。一旦所有输入都输入到数组中,我试图跳出更大的 for 循环。我可以成功地将正确的字符串元素输入到数组中,但是一旦我这样做就无法退出循环。

最佳答案

strtok如果找不到更多标记,可能会返回 NULL 指针。因此,您必须在使用前检查 cp 值:

cp = strtok(NULL, hash);
if (cp != NULL)
{
........
}

关于命令解析 UNIX shell C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833297/

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