在用C循环使用的strtok()? [英] Using strtok() in a loop in C?

查看:124
本文介绍了在用C循环使用的strtok()?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用的strtok()的嵌套循环。但是,这是不是给我想要的结果。
可能是因为他们使用的是同一个内存位置。我的code是形式: -

 的char * TOKEN1 = strtok的(STR1,%);
而(TOKEN1!= NULL)
{
  字符* token2 = strtok的(STR2,%);
  而(token2!= NULL)
   {
      // DO SMTHING
      token2 = strtok的(NULL,%);
    }
     TOKEN1 = strtok的(NULL,%);
     //做更多的事情
 }


解决方案

的strtok(),确实使用了一些静态内存来保存它的调用之间的上下文。使用可重入版本的strtok() strtok_r()来代替,或 strtok_s() 如果你正在使用VS(等同于 strtok_r())。

它有一个附加的上下文参数,你可以在不同的循环使用不同的背景。

 的char *托克,*保存;
对于(TOK = strtok_r(STR,%,&安培;保存);托克; TOK = strtok_r(NULL,%,&安培;保存))
{
    / *做一些事情TOK* /
}

I am trying to use strtok() in nested loop. But this is not giving me desired results. Possibly because they are using same memory location. My code is of the form:-

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
 }

解决方案

Yes, strtok(), indeed, uses some static memory to save its context between invocations. Use a reentrant version of strtok(), strtok_r() instead, or strtok_s() if you are using VS (identical to strtok_r()).

It has an additional context argument, and you can use different contexts in different loops.

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

这篇关于在用C循环使用的strtok()?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆