c - strtok 和函数调用

标签 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,".");
}

最佳答案

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

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

关于c - strtok 和函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277963/

相关文章:

c - strtok() 空字符串输入时出现段错误

c++ - 试图理解 strtok

c - strtok在C89中吗?

c++ - 防撞正则表达式?

c - 关于 C 中的关系运算符的问题?

python - 在 Python 中用冒号分割字符串

R,str_replace,gsub,如何将一个字符向量替换为另一个字符向量?

java - 如何在没有正则表达式的情况下拆分字符串

c - 如果我在 C 程序中用 #define 或 const 声明常量会出错

c - 从像 folder1/file1.txt 这样的字符串中提取 C