strtok和函数调用

时间:2009-08-14 13:51:25

标签: c string strtok

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

在下面的代码中:如果我对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,".");
}

4 个答案:

答案 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);

并查看是否有任何更改