即使使用正确的分隔符,strtok 也不能正确分割空格

strtok not splitting spaces correctly even with correct delimiter

我正在尝试拆分两个单词(以及更多单词)并通过使用 strtok 将其拆分为标记来将它们放入一个数组中。我的分隔符包括 " \t\n";,如下面的代码所示。例如,如果我输入 "cat program.c",它只会打印 cat 标记而不是 program.c 标记,我不知道为什么。我的定界符不正确还是我没有正确拆分字符串?这是代码

  char b[256];
  int k = 0;
  char *args[4];
  char *tokens;
  char delimiters[] = " \t\n";
  printf("Please enter the command you want to use:\n");
  scanf("%255s", b);
  tokens = strtok(b, delimiters);
  while (tokens != NULL){
    args[k++] = tokens;
    printf("%s\n",tokens);
    tokens = strtok(NULL, delimiters);
  }

问题不是 strtok(),而是 scanf()%s 字段指令扫描 空格分隔的 字符串,因此当输入为 cat program.c 时,只有“猫”会进入数组 b 首先。 ( program.c 仍然等待读取。)如果你想一次读取整行输入,那么我建议使用 fgets(),而不是。