在C中的循环中使用strtok()?

Ale*_*der 13 c string strtok

我试图在嵌套循环中使用strtok().但这并没有给我预期的结果.可能是因为他们使用相同的内存位置.我的代码形式如下: -

char *token1 = strtok(Str1, "%");
while(token1 != NULL )
{
  char *token2 = strtok(Str2, "%");
  while(token2 != NULL )
   {
      //DO SMTHING
      token2 = strtok(NULL, "%");
    }
     token1 = strtok(NULL, "%");
     // Do something more
 }
Run Code Online (Sandbox Code Playgroud)

Ale*_*x B 21

是的,strtok()实际上,使用一些静态内存来保存调用之间的上下文.使用的重入版本strtok(),strtok_r()而不是,或者strtok_s()如果你正在使用VS(相同strtok_r()).

它有一个额外的上下文参数,您可以在不同的循环中使用不同的上下文.

char *tok, *saved;
for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved))
{
    /* Do something with "tok" */
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你不编辑`strtok`这样做的原因,这里有一些关于`strtok_r`的更多信息:http://www.mkssoftware.com/docs/man3/strtok_r.3.asp (2认同)