strtok不打印所有部分的字符串

时间:2016-03-11 19:49:09

标签: c strtok

我想在输入字符串

中获取所有令牌
#include <stdio.h>
#include <unistd.h>

#define MAX_LINE 80

int main(void)
{
    char *args[MAX_LINE/2+1];
    char *tokens[MAX_LINE/2+1];
    int should_run = 1;
    char *split;
    int i = 0;


    int concurrent = 0;
    printf("osh>");
    fflush(stdout);
    scanf("%s", args);
    split = strtok(args," ");
    while(split!=NULL)
    {
        printf(split);
        tokens[i]=strdup(split);
        split = strtok(NULL, " ");

        i++;

    }
}

为什么上面的代码不能打印我的字符串中的所有标记 例如,如果我的输入是“ls -l&amp;”它只打印ls?

感谢您的时间

2 个答案:

答案 0 :(得分:1)

问题在于行scanf("%s", args);。它读取字符串到空白。您可以使用scanf("%[^\n]", args);。并将char* args[MAX_LINE/2+1];更改为char args[MAX_LINE/2+1];

答案 1 :(得分:0)

* split需要指向一块内存, 之一:

1)足够大的数组,分裂指向数组[0]。

2)在一个区块的开头附近使用malloc,并且 free(split); 靠近结尾。

这两种模式是替代方案,不要将它们结合起来,因为它会导致很大的问题。