为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
绝地无双 2019-11-04 10:00:20
我试图在嵌套循环中使用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 }
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

是的,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" */

}


查看完整回答
反对 回复 2019-11-04
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

strtok使用的是静态缓冲区。在您的情况下,您应该使用strtok_r。此功能正在使用用户提供的缓冲区。


查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信