Strtok()没有正确拆分数组

时间:2016-03-19 17:28:54

标签: c strtok

我试图将我收到的数组作为参数拆分为使用strtok()的函数,它根本没有按预期工作。 例如,我收到此字符串:"ls -l",我只得到"ls"。 此外,我想将令牌存储到一个字符串数组中。 以下是我到目前为止所做的事情:

int mysystem(char *s) {
    int i;
    char *tok , *aux;
    int conta = 0;
    int pid, status;
    int j = 0;

    tok = strtok(s , " ");

    while (tok != NULL) {
        tok = strtok(NULL, s);
        conta++;
    }

    char *store[conta];
    i = 0;
    aux = strtok(s ," ");

    while (aux != NULL) {
        store[i] = aux;
        aux = strtok(NULL, s);
        i++;
    }

    pid = fork();
    if (pid == 0)
        execvp(store[0], store);

    while (j != conta) {
        wait (&status);
        j++;
    }
    return 0;
}

这是我将字符串传递给我的函数的主要内容:

int main(int args, char **arg) {
    int i;
    int s;
    int f = 0;

    if (args >= 2) {
        int length = 0;

        for (i = 1; i < args; ++i) {
            length += strlen(arg[i]);
        }
        char *output = (char*)malloc(length + 1);
        char *dest = output;
        i = 1;

        while (i < args) {
            dest = strcat (dest,arg[i]);
            i++;
            if (i < args) {
                dest = strcat (dest," ");
            } 
        }       
        dest = strcat(dest, "\0");
        s = mysystem(dest);
        free(output);
        return s;
    }
}

1 个答案:

答案 0 :(得分:1)

<h1 class="jumbotron"><img class="logo" src="logo2.jpg"/>My website</h1> <ul> <li><a style="border-top 1px solid #bbb" class="active" href="index.html">Home</a></li> <li><a href="news.html">News</a></li> <li><a href="contact.html">Contact</a></li> <li><a href="about.html">About</a></li> </ul> 修改字符串,因此您无法在同一个字符串上运行两次。 strtok已转换为由s个字符分隔的一系列字符串。改为使用足够长的数组&#34;并且只需要经过一次。