从递归返回后,c strtok返回NULL

时间:2012-11-14 06:16:31

标签: c recursion strtok

当我没有在我的代码中调用相同的函数时,一切运行良好但是当函数突然从递归返回时,变量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。在调用递归时是否有我不知道的事情?

2 个答案:

答案 0 :(得分:11)

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

另请参阅:strtok, strtok_r

答案 1 :(得分:5)

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

请改用其可重入版本strtok_r