首页 > 解决方案 > 即使使用正确的分隔符,strtok 也不能正确分割空格

问题描述

我正在尝试拆分两个单词(以及更多)并将它们放入一个数组中,方法是使用 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);
  }

标签: arraysccommand-line-argumentsstrtok

解决方案


问题不在于strtok(),而在于scanf()%s字段指令扫描以空格分隔的字符串,因此当输入为 时cat program.c,只有“猫”才会b首先将其放入数组中。( program.c剩余部分等待阅读。)如果您想一次阅读一整行输入,那么我建议您fgets()改为使用 。


推荐阅读