strtok和函数调用

tec*_*zen 1 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,".");
}
Run Code Online (Sandbox Code Playgroud)

qrd*_*rdl 11

strtok()保留一些静态数据,因此可能直接或间接MyLogger调用strtok().

替换strtok()strtok_r()(可重入版本strtok())以解决此问题.

  • 这就是为什么我永远不会使用strtok(),并认为它是关于C的最蠢的事情. (4认同)
  • 他是对的.strtok()的问题与"粗心"用户无关,完全局限于糟糕的库设计. (3认同)
  • 你永远不应该使用strtok. (2认同)