Question

J'ai ce comportement très étrange à venir:

Dans le code ci-dessous: Si je commente l'appel à myLogger alors tout fonctionne très bien qui est que je reçois le sTempNr tokenizé 4 jetons sont imprimés. Mais si je décommenter l'appel à myLogger pour la connexion alors que l'itération a lieu une fois et dans d'autres classes d'essai avec un code similaire comme ci-dessous il y a un looping prennent place plus de 4 fois avec des informations redondantes envoyées à myLogger.

Alors, j'ai vérifié avec l'outil Purify pour déterminer s'il y avait des problèmes de mémoire dans myLogger. Impossible de trouver un. MyLogger utilise vaargs pour extraire args et vfprintf appeler à imprimer.

Je ne sais pas comment déboguer le code plus loin. Toute orientation serait appréciée!.

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,".");
}
Était-ce utile?

La solution

strtok() conserve des données statiques à l'intérieur des appels donc probablement MyLogger strtok(), que ce soit directement ou indirectement.

Remplacer strtok() avec strtok_r() (version rentrante strtok()) pour contourner ce problème.

Autres conseils

est l'enregistreur appelant strtok?

myLogger utilise-t-strtok aussi bien? Notez que strtok n'est pas apatride.

Sons comme myLogger corrompt la chaîne dans sTempStr. Essayez l'imprimer à nouveau après l'appel à myLogger. par exemple,

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

et voir si quelque chose a changé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top