1

私はこの非常に奇妙な振る舞いをしています:

以下のコードでは: MyLogger への呼び出しにコメントを付けると、sTempNr がトークン化され、4 つのトークンが表示されるというすべてが正常に機能します。しかし、ログ記録のために MyLogger への呼び出しのコメントを外すと、反復は 1 回だけ行われ、以下のような同様のコードを持つ他のテスト クラスでは、冗長な情報が MyLogger に送信されて 4 回以上ループが発生します。

そのため、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,".");
}
4

4 に答える 4

11

strtok()内部にいくつかの静的データを保持するため、おそらく直接または間接的に をMyLogger呼び出します。strtok()

この問題を回避するにはstrtok()strtok_r()(の再入可能バージョン) に置き換えます。strtok()

于 2009-08-14T14:00:07.403 に答える
1

ロガーは strtok を呼び出していますか?

于 2009-08-14T13:59:38.200 に答える
1

MyLogger も strtok を使用していますか? strtok はステートレスではないことに注意してください。

于 2009-08-14T14:00:30.680 に答える
-1

MyLogger が sTempStr の文字列を破損しているようです。MyLogger を呼び出した後、もう一度印刷してみてください。例えば

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

何かが変わったかどうかを確認します

于 2009-08-14T14:03:01.380 に答える