strtok et la fonction appel
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,".");
}
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é