strtok и функциональный вызов
Вопрос
У меня есть это чрезвычайно странное поведение:
В приведенном ниже коде: если я прокомментирую звонок в 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);
и посмотрите, изменилось ли что -нибудь