我有这种非常奇怪的行为:

在以下代码中:如果我对Mylogger的电话评论,那么一切正常,我会得到STEMPNR令牌化,并打印4个令牌。但是,如果我输入对Mylogger进行记录的呼吁,那么只有一次和其他测试类中的迭代,与下面的其他代码相似,将进行超过4次循环,并将冗余信息发送给mylogger。

因此,我使用净化工具检查了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())解决这个问题。

其他提示

记录器会调用strtok吗?

mylogger也使用strtok吗?请注意,Strtok并非无状态。

听起来MyLogger正在损坏StemPstr中的字符串。致电Mylogger后再次打印出来。例如

 printf("in in TempStr[%s]\n",sTempStr);
 MyLogger("write","","Temp String[%s]",sTempStr);
 printf("in in TempStr[%s]\n",sTempStr);

看看是否有任何变化

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top