У меня есть проблема в strtock в C++ мне нужно прочитать follwing строку из файлапроблема strtok в C++
6: 00,6: 20,6: 40,7: 00,7: 20, 7: 40,8: 00,8: 50,9: 40,10: 30,11: 20,12: 00 Длина строки неизвестна (я не знаю, сколько аргументов у меня есть);
я пытаюсь сделать эту функцию:
void RailwayLine::initilizeLoz(char line[1024])
{
char * pch;
char * timeReader;
Hour *hour;
char * pch2=NULL;
int time;
int minute;
char line2[1024];
strcpy(line2,line);
pch = strtok (line2,",");
while (pch != NULL)
{
delete pch2;
pch2= new char(strlen(pch)+1);
if(pch2!=NULL)
strcpy(pch2,pch);
timeReader = strtok (pch2,":");
time=atoi(timeReader);
timeReader = strtok (NULL,":");
minute=atoi(timeReader);
hour=new Hour(time,minute);
this-> UpdateLoz((*hour));
pch=strtok(NULL,",");
}
}
, но это не работает. itj читает только первый аргумент (7:10)! что может быть затуханием? Как я могу улучшить свой код? спасибо
Этот код имеет место утечка памяти , `pch2` не будет удаляться после последней итерации. Зачем вам удалять его в начале цикла, а не в конце, когда вы его используете? – jdmichal 2010-12-15 16:40:53
Нет смысла проверять «NULL» после «новой» памяти. Если `new` failed, это вызовет исключение` std :: bad_alloc` и проверка `NULL` никогда не будет достигнута. Если вы хотите проверить «NULL», передайте `std :: nothrow` на вызов` new`; иначе замените «NULL» чек с помощью «try-catch». – Praetorian 2010-12-15 16:51:45