C, parse comma-separated line
Кошерен ли такой код для разбиения строки, разделенной запятыми на отдельные строки: http://ideone.com/rhNXq ?
PS: strtok не признаю по идеологическим причинам - она меняет анализируемую строку, что меня крайне пугает, хотя в моем конкретном случае это не мешает.
PPS: безотносительно к strtok, в функции было минимум две ошибки - отсутствие проверки на выход за пределы буфера и попадание eol в последнюю строку (девайсина, с которой приходит строка, терминирует ее \r)
PS: strtok не признаю по идеологическим причинам - она меняет анализируемую строку, что меня крайне пугает, хотя в моем конкретном случае это не мешает.
PPS: безотносительно к strtok, в функции было минимум две ошибки - отсутствие проверки на выход за пределы буфера и попадание eol в последнюю строку (девайсина, с которой приходит строка, терминирует ее \r)
no subject
int parse_answer(char **buffer_start, char *buffer_end, char **curr_ptr, size_t *curr_size)
{
if(*buffer_start >= buffer_end){
return 0;
}
*curr_ptr = *buffer_start;
while(**buffer_start != ','){
(*buffer_start)++;
}
Где проверка на конец буфера?
(*buffer_start)++;
One-off потому что запятая может быть и последним символом тоже. Вообще на каждом операторе, сдвигающем индекс влево или вправо, нужно неукоснительно проверять boundary conditions. Если сдвиг нетривиален, но инвариантен по отношению к граничным условиям, откомментируйте это в коде. Только так, только двойная итальянская бухгалтерия...
*curr_size=*buffer_start-*curr_ptr-1;
return 1;
}
Вроде так как-то. Код прототипический, так что я не думал заострять на этом внимание более чем в образовательных целях.
PS Я сам грешен, в недавнем коде JSON разбирал именно тупой итерацией по буферу и switch оператором... но уж сильно хотелось самому написать :)