6

当我不在我的代码中调用相同的函数时,一切正常,但是当函数从递归突然返回时,变量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, ",");呈现pch0x0。调用递归时有什么我不知道的吗?

4

2 回答 2

11

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

参见:strtok、strtok_r

于 2012-11-14T06:18:37.073 回答
5

在上一次执行完成之前,您不能strtok再次调用该函数 - 它不是可重入的。

改用它的可重入版本strtok_r

于 2012-11-14T06:20:51.673 回答