我有一个非常奇怪的行为:
在下面的代码中:如果我注释了对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())以解决此问题。

10-08 18:47