【问题标题】:c strtok returns NULL after return from recursionc strtok从递归返回后返回NULL
【发布时间】:2012-11-14 06:16:31
【问题描述】:

当我不在我的代码中调用相同的函数时,一切正常,但是当函数突然从递归返回时,变量 pch 为 NULL:

 void someFunction()
     {
        char * pch;
        char tempDependencies[100*64+100];
        strcpy(tempDependencies,map[j].filesNeeded);
        pch = strtok(tempDependencies,",");
        while (pch != NULL)
        {
            someFunction(); <- if i comment this out it works fine
            pch = strtok (NULL, ",");
        }
      }

因此,例如,当循环作用于字符串file2,file3,file4 时,它会正确拆分file2 并将字符串修改为file2\\000file3,file4,但下一次对pch = strtok (NULL, ","); 的调用会将pch 呈现为0x0。调用递归时有什么我不知道的吗?

【问题讨论】:

    标签: c recursion strtok


    【解决方案1】:

    strtok() 不可重入。如果你想在递归函数中使用它,你必须使用strtok_r()

    另请参阅:strtok, strtok_r

    【讨论】:

      【解决方案2】:

      在上一次执行完成之前,您不能再次调用 strtok 函数 - 它不是 reentrant

      改用它的可重入版本strtok_r

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 2013-12-12
        • 1970-01-01
        • 2018-03-25
        • 2021-03-14
        • 2017-12-11
        • 2014-06-04
        • 2014-11-13
        • 2019-05-30
        相关资源
        最近更新 更多