我正在尝试在嵌套循环中使用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, "%");
}
最佳答案
是的,strtok()
确实使用一些静态内存来保存调用之间的上下文。使用可重入版本的 strtok()
、strtok_r()
代替,或者如果您使用 VS,则使用 strtok_s()
(与 strtok_r()
)。
它有一个额外的上下文参数,您可以在不同的循环中使用不同的上下文。
char *tok, *saved;
for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved))
{
/* Do something with "tok" */
}
关于c - 在 C 中的嵌套循环中使用 strtok() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58210318/