简体   繁体   English

命令解析UNIX shell C

[英]Command parsing UNIX shell C

I was trying to create a program where I could parse the command and parameters enters by the user into specific arrays (these commands and params would execute commands like "ls", "ls -l", "ls -l | wc" However, I am having problem with parsing: 我试图创建一个程序,可以在其中解析用户输入的命令和参数到特定数组中(这些命令和参数将执行“ 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;
    }
}

I run into a problem when I do if (strlen(cp) == NULL), there is a segmentation fault. 如果(strlen(cp)== NULL)出现分段错误,我就会遇到问题。 I am trying to break out of the larger for loop once all the inputs have been entered into arrays. 一旦所有输入都输入到数组中,我试图突破较大的for循环。 I can succesfully enter the correct string elements into the arrays but I just can't exit the loop once I have done so. 我可以成功地在数组中输入正确的字符串元素,但是一旦完成就无法退出循环。

strtok may return NULL pointers if can't found more tokens. 如果找不到更多令牌, strtok可能会返回NULL指针。 So, you must check cp value before using it: 因此,您必须在使用前检查cp值:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM