我有这种极其奇怪的行为:
在下面的代码中:如果我评论对 MyLogger 的调用,那么一切正常,我得到了 sTempNr 标记并打印了 4 个标记。 但是,如果我取消对 MyLogger 的调用进行日志记录的注释,那么只有迭代发生一次,而在其他具有类似代码的测试类中,如下所示,循环发生超过 4 次,冗余信息被发送到 MyLogger。
因此,我使用 Purify 工具进行了检查,以确定 MyLogger 中是否存在内存问题。 找不到任何。 MyLogger 使用 vaargs 提取 args 并使用 vfprintf 调用打印。
我不确定如何进一步调试这段代码。任何指导将不胜感激!
char sTempNr[41] = "1129Z13589.2.9.10";
char *sTempStr;
sTempStr = NULL;
sTempStr = strtok(sTempNr,".");
while (sTempStr)
{
printf("in in TempStr[%s]\n",sTempStr);
//MyLogger("write","","Temp String[%s]",sTempStr);
sTempStr = strtok(NULL,".");
}
最佳答案
strtok()
在内部保留一些静态数据,因此 MyLogger
可能会直接或间接调用 strtok()
。
将 strtok()
替换为 strtok_r()
(strtok()
的可重入版本)以解决此问题。
关于c - strtok 和函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277963/