带有分隔符的strtok_r标记

时间:2011-09-20 03:45:13

标签: c strtok

我发现了类似的帖子,但我对strtok_r的问题没有明确的答案。

我正在使用strtok_r来解析命令行以获取我需要通过带有标志的execv执行的命令,但是,出于测试目的,我打印出来。当试图划分多个字符,排除空格时,它工作正常。但是在测试空白时,请使用以下代码:

void tokenize(char *str1)
{
  char *token;
  char *saveptr1;
  int j, i;


  const char *delim = " ";
  i = strlen(str1);

  for(j = 0; j < i; j++, str1 = NULL)
  {
    token = strtok_r(str1, delim, &saveptr1);
    if(token == NULL)
      break;

    printf("save: %s\n", token);
    printf("\n");
  }
}

我得到了测试字符串(ls -al)的以下输出:

save: ls

2 个答案:

答案 0 :(得分:1)

你怎么读字符串? 也许你正在阅读字符串,例如:cin&gt;&gt;串;或scanf(“%s”,str);只读取第一个标记(“ls”)。

相反,您应该使用类似cin.getline()或scanf(“%[^ \ n]”,str)的内容读取整行。检查一下!

为什么strtok_r不是strtok?

答案 1 :(得分:0)

你的for循环在每次循环后都设置str1=NULL

for(j = 0; j < i; j++, str1 = NULL)
{
    ...
}

所以第一次通过循环,它按预期工作,但之后,没有提取进一步的标记,因为str1不再指向字符串。