我有这种非常奇怪的行为:
在下面的代码中:如果我对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,".");
}
Run Code Online (Sandbox Code Playgroud)
qrd*_*rdl 11
strtok()保留一些静态数据,因此可能直接或间接MyLogger调用strtok().
替换strtok()为strtok_r()(可重入版本strtok())以解决此问题.