当我没有在我的代码中调用相同的函数时,一切运行良好但是当函数突然从递归返回时,变量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
。在调用递归时是否有我不知道的事情?
答案 0 :(得分:11)
strtok()
不可重入。如果要在递归函数中使用它,则必须使用strtok_r()
。
另请参阅:strtok, strtok_r
答案 1 :(得分:5)
在上一次执行完成之前,您无法再次调用strtok
函数 - 它不是reentrant。
请改用其可重入版本strtok_r
。