Pergunta
Eu tenho esse comportamento extremamente estranho chegando:
No código abaixo: se eu comentar a chamada para o MyLogger, tudo funcionará bem, eu obtive o tokenizado do STEMPNR e 4 tokens são impressos. Mas se eu descomentar a chamada para o MyLogger para registrar, apenas a iteração ocorre de uma vez e em outra aula de teste com código semelhante, como abaixo, há um loop que ocorre mais de 4 vezes com informações redundantes sendo enviadas ao MyLogger.
Então, verifiquei com a ferramenta Purify para determinar se havia alguns problemas de memória no MyLogger. Não conseguiu encontrar nenhum. O MyLogger está usando VAARGs para extrair chamadas de args e vfprintf para imprimir.
Não tenho certeza de como depurar ainda mais esse código. Qualquer orientação seria apreciada!.
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,".");
}
Solução
strtok()
mantém alguns dados estáticos dentro de MyLogger
chamadas strtok()
, direta ou indiretamente.
Substituir strtok()
com strtok_r()
(versão reentrante de strtok()
) para contornar esse problema.
Outras dicas
O logger está chamando Strtok?
O MyLogger também está usando o STRTOK? Observe que Strtok não está apátrida.
Parece que o MyLogger está corrompendo a string no STEMPSTR. Tente imprimi -lo novamente após a chamada para o MyLogger. por exemplo
printf("in in TempStr[%s]\n",sTempStr);
MyLogger("write","","Temp String[%s]",sTempStr);
printf("in in TempStr[%s]\n",sTempStr);
e veja se alguma coisa mudou