在 C 中的嵌套循环中使用 strtok() 吗?
我试图在嵌套循环中使用 strtok()
但这并没有给我想要的结果, 可能是因为它们使用相同的内存位置。我的代码的形式为:-
char *token1 = strtok(Str1, "%");
while (token1 != NULL)
{
char *token2 = strtok(Str2, "%");
while (token2 != NULL)
{
//Do something
token2 = strtok(NULL, "%");
}
// Do something more
token1 = strtok(NULL, "%");
}
I am trying to use strtok()
in nested loops but this is not giving me desired results,
possibly because they are using the same memory location. My code is of the form:-
char *token1 = strtok(Str1, "%");
while (token1 != NULL)
{
char *token2 = strtok(Str2, "%");
while (token2 != NULL)
{
//Do something
token2 = strtok(NULL, "%");
}
// Do something more
token1 = strtok(NULL, "%");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,strtok() 确实使用一些静态内存来保存调用之间的上下文。使用可重入版本的
strtok()
、strtok_r()
代替,或者如果您使用 VS,则使用strtok_s()
(与strtok_r() )。
它有一个附加的上下文参数,您可以在不同的循环中使用不同的上下文。
Yes,
strtok()
, indeed, uses some static memory to save its context between invocations. Use a reentrant version ofstrtok()
,strtok_r()
instead, orstrtok_s()
if you are using VS (identical tostrtok_r()
).It has an additional context argument, and you can use different contexts in different loops.
strtok 使用静态缓冲区。
在你的情况下,你应该使用 strtok_r。该函数使用用户提供的缓冲区。
strtok is using a static buffer.
In your case you should use strtok_r. This function is using a buffer provided by the user.
WayneAKing 发布了替代方案 在 Microsoft 开发人员中心。
引用他的话:
如果您的环境中没有 Microsoft 库,这是一种替代方法。
WayneAKing posted an alternative in the Microsoft Developer Center.
Citing him:
This is an alternative if you don't have the Microsoft libraries in your environment.