我有这种非常奇怪的行为:
在下面的代码中:如果我对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,".");
}
答案 0 :(得分:10)
strtok()
会在内部保留一些静态数据,因此MyLogger
可能会直接或间接调用strtok()
。
将strtok()
替换为strtok_r()
(strtok()
的可重入版本)以解决此问题。
答案 1 :(得分:1)
记录器是否正在调用strtok?
答案 2 :(得分:1)
MyLogger也使用strtok吗?请注意,strtok不是无状态的。
答案 3 :(得分:-1)
听起来MyLogger破坏了sTempStr中的字符串。在调用MyLogger后尝试再次打印出来。例如
printf("in in TempStr[%s]\n",sTempStr);
MyLogger("write","","Temp String[%s]",sTempStr);
printf("in in TempStr[%s]\n",sTempStr);
并查看是否有任何更改