c - 在 C 中的嵌套循环中使用 strtok() 吗?

标签 c string 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, "%");
}

最佳答案

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

相关文章:

c - 使用 strncpy() 复制 const char *

c - Ptrace 无法附加

php - 在 PHP 中将字符串转换为整数

重新排列字符串中字符的 C# 算法

Java if 语句很愚蠢(简单)

来自多个函数的全局字符串的 C strtok

c - 如何正确使用strtok进行版本比较?

c - NULL 指针作为数组结尾的标记

c - 输入的数字大于 int 类型允许的数字

c - strtok 究竟是如何工作的?