使用strtok拆分C数组

时间:2019-12-12 22:29:59

标签: c strtok

我正在制作一个自定义的C shell,当前正在使用空格拆分命令:

(我目前正在做的简化示例)

char *buf[20];
char *tempVar;
tempvar = strtok(buf, " ");

例如:

sleep 5将被分为sleep5

但是,我也想拆分为&(以创建后台进程)。因此sleep 5&将被分为3:sleep5&

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用特定的方法来提取数字,或者只是将字符&放下。我在这里有一个想法,也许这不是最好的解决方案。希望进一步交流。

char buf[] = "sleep 5&";
char *cmd;
char *arg;
char *tmpArg;
int count = 0;
while (true) {
    if (0 == count) {
        cmd = strtok(buf, " ");
        arg = strtok(NULL, " ");
    } else {
        cmd = strtok(NULL, " ");
        arg = strtok(NULL, " ");
    }
    printf("%s\n", cmd);

    if (NULL != cmd) {
        if (strcmp("sleep", cmd) == 0) {
            if (arg != NULL) {
                // 1. introduce a method to extract digit or
                // 2. using `&` to split the arg again, the shortcoming is that we omit character `&` here.
                for (int i = 0; i < 2; ++i) {
                    if (0 == i) {
                        tmpArg = strtok(arg, "&");
                    } else {
                        tmpArg = strtok(NULL, "&");
                    }
                    printf("%s\n", tmpArg);
                }
            }
        }
    } else {
        break;
    }
    ++count;
}