C:使用strtok解析命令行输入

时间:2015-05-23 17:31:33

标签: c string

对于学校作业,我必须制作一个Unix shell。我们必须实现的一个功能是,当它们被';'分隔时,能够从同一行执行多个命令。我试图使用strtok来实现这一点,但由于某种原因,它只执行最后一个命令(例如," ls; pwd"只执行pwd)。两个命令在单独使用时工作正常,但不能一起使用。这是涉及strtok

的代码
const char* s = ";";
char* token = strtok(pinput, s);

        while( token != NULL ) 
        {
            int argc = get_argc(token);
            char** argv = get_argv(argc, token);

            parse(argc, argv);

            token = strtok(NULL, s);
        }
    }

我测试了get_argc,get_argv,并解析了一堆,它们似乎都运行良好。在使用strtok时,我有什么不对吗?感谢。

2 个答案:

答案 0 :(得分:1)

我不知道你的get_argc()和get_argv()正在做什么...所以这里有一些东西解释了strtok对命令行用户输入的使用。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// Sample command line => a.out 'ls;pwd;ls;pwd'
// Have to use quotes around your input from command line, due to the 
// special character ";" in your input.

int main(int argc, char *argv[])
{
        int iLen = strlen(argv[1]);
        char *sInput = (char *)malloc((iLen+1) * sizeof(char));

        strcpy(sInput, argv[1]);
        printf("String => %s\n", argv[1]); // String => ls;pwd;pwd;pwd

        char *sSeparator = ";";
        char *pToken = strtok(sInput, sSeparator);

        while(1)
        {
                if(pToken == NULL)
                        break;

                printf("Token = %s\n", pToken);

                pToken = strtok(NULL, sSeparator);
        }

        return 0;
}

答案 1 :(得分:0)

您可以将整个字符串作为输入,然后使用“;”拆分。由于这是学校作业,我希望你尝试编写它。