【问题标题】:strtok not splitting spaces correctly even with correct delimiter即使使用正确的分隔符,strtok 也不能正确分割空格
【发布时间】:2021-12-06 21:11:28
【问题描述】:

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

【问题讨论】:

  • scanf("%255s", b); 哎哟。您关心为您的输入提供一个长度限制,但随后您使用了一个与缓冲区相差甚远的值:char b[100];

标签: arrays c command-line-arguments strtok


【解决方案1】:

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

【讨论】:

  • scanf("%[^\n]100s", b) 这样的东西会起作用,但我同意fgets() 是一个更好的选择。 scanf() 是一个问题的雷区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多