C strtok未打印字符串的所有部分

C strtok未打印字符串的所有部分,c,strtok,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 =

我正在尝试获取输入字符串中的所有标记

#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++;

    }
}
#包括
#包括
#定义最大行80
内部主(空)
{
字符*args[最大行/2+1];
字符*标记[最大行/2+1];
int应该运行=1;
字符*拆分;
int i=0;
int=0;
printf(“osh>”);
fflush(stdout);
scanf(“%s”,args);
split=strtok(args,“”);
while(拆分!=NULL)
{
printf(分割);
代币[i]=strdup(分割);
split=strtok(空,“”);
i++;
}
}
为什么上面的代码不打印字符串中的所有标记 例如,如果我的输入是“ls-l&”,它只打印ls


感谢您的时间

问题在于行
scanf(“%s”,args)。它读取的字符串最大为空格。您可以改为使用
scanf(“%[^\n]”,args)。并且也改变
char*args[MAX_LINE/2+1]
字符参数[最大行/2+1]

*拆分需要指向内存块, 要么:

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

2) 在块的起点附近使用malloc,并自由(拆分)接近尾声

这两种模式都是可供选择的,不要将它们结合在一起,因为这会导致很大的问题