metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-04-22 06:05 pm

C, parse comma-separated line

Кошерен ли такой код для разбиения строки, разделенной запятыми на отдельные строки: http://ideone.com/rhNXq ?

PS: strtok не признаю по идеологическим причинам - она меняет анализируемую строку, что меня крайне пугает, хотя в моем конкретном случае это не мешает.

PPS: безотносительно к strtok, в функции было минимум две ошибки - отсутствие проверки на выход за пределы буфера и попадание eol в последнюю строку (девайсина, с которой приходит строка, терминирует ее \r)

[identity profile] metaclass.livejournal.com 2012-04-22 09:12 pm (UTC)(link)
У меня там не только первое вхождение, а перебирает все вхождения. Т.е.я специально source_start модифицирую.

Проверки параметров и выход из цикла, да, надо исправить.
А вот насчет возвращаемых значений - почему именно так: 0 и -1?
Я, когда писал, ориентировался на что-то вроде: 0 (false) - завершение работы, 1 (true) - продолжение.
Стандартные же true и false вроде только в C99 появились.

[identity profile] slonik-v-domene.livejournal.com 2012-04-22 09:29 pm (UTC)(link)
1) Потому, что ожидаемое поведение -1 - ошибка, а 0 и больше - успех.
2) true и false не существуют до тех пор, пока не существует типа bool. Тот, кто указывает #define true .... - тот является клиническим мудаком.
3) если надо найти все последовательности, следует просто вызывать функцию в цикле