题
我有这种非常奇怪的行为:
在以下代码中:如果我对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);
看看是否有任何变化
不隶属于 StackOverflow