Вопрос

У меня есть это чрезвычайно странное поведение:

В приведенном ниже коде: если я прокомментирую звонок в MyLogger, то все работает нормально, то я получаю токен Stempnr, а 4 токена - напечатаны. Но если я расстроен призыв к MyLogger для регистрации, то только итерация происходит один раз и в других классах тестирования с аналогичным кодом, как и ниже, происходит цикл более 4 раза, когда избыточная информация отправляется в MyLogger.

Итак, я проверил с помощью инструмента Purify, чтобы определить, были ли проблемы с памятью в MyLogger. Не мог найти ничего. MyLogger использует Vaargs для извлечения ARGS и 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,".");
}
Это было полезно?

Решение

strtok() хранит некоторые статические данные внутри, так что, вероятно, MyLogger вызовы strtok(), либо прямо, либо косвенно.

Заменять strtok() с strtok_r() (версия strtok()) обойти эту проблему.

Другие советы

Вызывает ли логист вызов Strtok?

Mylogger также использует Strtok? Обратите внимание, что Strtok не без сохранения состояния.

Похоже, Mylogger развращает строку в Stempstr. Попробуйте распечатать его снова после вызова Mylogger. например

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

и посмотрите, изменилось ли что -нибудь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top