strtok e funzione di chiamata
Domanda
Ho questo strano comportamento estremamente venuta:
Nel codice qui sotto: Se io commento la chiamata a myLogger poi tutto funziona bene che è ho la sTempNr tokenized e 4 gettoni vengono stampati. Ma se Scommentare la chiamata a myLogger per accedere allora solo l'iterazione avviene una volta e in altre classi test con codice simile come sotto v'è un loop avvenendo più di 4 volte con informazioni ridondanti inviati a myLogger.
Così, ho controllato con strumento Purify per determinare se ci sono stati alcuni problemi di memoria in myLogger. Impossibile trovare alcuna. MyLogger sta usando vaargs per estrarre args e vfprintf chiamare per la stampa.
Non sono sicuro di come eseguire il debug ulteriormente questo codice. Tutto il consiglio sarebbe apprezzato!.
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,".");
}
Soluzione
strtok()
conserva alcuni dati statici all'interno chiamate quindi probabilmente MyLogger
strtok()
, direttamente o indirettamente.
Sostituire strtok()
con strtok_r()
(versione da rientro di strtok()
) per aggirare questo problema.
Altri suggerimenti
E 'il logger chiamando strtok?
È myLogger utilizza strtok come bene? Si noti che strtok non è senza stato.
Suona come myLogger sta corrompendo la stringa in sTempStr. Provare a stampare di nuovo fuori dopo la chiamata a myLogger. ad esempio
printf("in in TempStr[%s]\n",sTempStr);
MyLogger("write","","Temp String[%s]",sTempStr);
printf("in in TempStr[%s]\n",sTempStr);
e vedere se qualcosa è cambiato