strtok 和函数调用

发布于 2024-08-02 10:34:07 字数 608 浏览 7 评论 0原文

我遇到了这种极其奇怪的行为:

在下面的代码中:如果我注释对 MyLogger 的调用,那么一切正常,即我得到 sTempNr 标记并打印 4 个标记。 但是,如果我取消注释对 MyLogger 进行日志记录的调用,则只会发生一次迭代,并且在具有如下类似代码的其他测试类中,会发生循环超过 4 次,并将冗余信息发送到 MyLogger。

因此,我使用 Purify 工具检查以确定 MyLogger 中是否存在内存问题。 找不到任何。 MyLogger 使用 vaargs 提取参数并使用 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,".");
}

I have this extremely strange behavior coming :

In the below code: If I comment the call to MyLogger then everything works fine that is I get the sTempNr tokenized and 4 tokens are printed .
But if I uncomment the call to MyLogger for logging then only the iteration takes place once and in other testing class with similar code as below there is a looping taking place more than 4 times with redundant info being sent to MyLogger.

So, I checked with Purify tool to determine if there were some memory issues in MyLogger.
Could not find any. MyLogger is using vaargs to extract args and vfprintf call to print.

I am not sure how to debug this code further. Any guidance would be appreciated!.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

避讳 2024-08-09 10:34:07

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

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

strtok() keeps some static data inside so probably MyLogger calls strtok(), either directly or indirectly.

Replace strtok() with strtok_r() (reentrant version of strtok()) to get around this problem.

独闯女儿国 2024-08-09 10:34:07

记录器是否正在调用 strtok?

Is the logger calling strtok?

回首观望 2024-08-09 10:34:07

MyLogger 也使用 strtok 吗?请注意,strtok 不是无状态的。

Is MyLogger using strtok as well? Note that strtok is not stateless.

寂寞陪衬 2024-08-09 10:34:07

听起来 MyLogger 正在损坏 sTempStr 中的字符串。尝试在调用 MyLogger 后再次打印它。例如

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

,看看是否有任何变化

Sounds like MyLogger is corrupting the string in sTempStr. Try printing it out again after the call to MyLogger. eg

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

and see if anything has changed

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文