LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

и загадочное «всю строку».

Обьясняю на пальцах:

"123qwe" (length = 6) -> должна быть ошибка
"1234456" (length = 3) -> должно распарсить только 123
"1234aa" (length = 3) -> снова 123
"   123" (length <= 6) -> ошибка (length не существенно)

Другими словами: хочу функцию, которая получает кусок памяти (указатель и размер) и потом проверяет что данный кусок памяти (от начала до конца) — строковое представление числа заданного (шаблоном) типа.

Например, если встретится точка, то это тоже валидная строка, только тип не int, а плавающая арифметика/IP адрес, или прочий валидный разделитель типа '/'...

Об этих разделителях я позабочусь сам, мне нужна функция, которая не считает себя умнее меня.

P.S. Подчеркну, что strtol может «улететь» за границы куска памяти, если продолжение удовлетворяет std::isdigit(str[i]) с не-нуль терминированными строками это уже может быть опасно.

P.P.S. А strtoul (из за спецификации С99) считает, что "-123" — это норма (ц).

Исходная версия KennyMinigun, :

и загадочное «всю строку».

Обьясняю на пальцах:

"123qwe" (length = 6) -> должна быть ошибка
"1234456" (length = 3) -> должно распарсить только 123
"1234aa" (length = 3) -> снова 123
"   123" (length <= 6) -> ошибка (length не существенно)

Другими словами: хочу функцию, которая получает кусок памяти (указатель и размер) и потом проверяет что данный кусок памяти (от начала до конца) — строковое представление числа заданного (шаблоном) типа.

Например, если встретится точка, то это тоже валидная строка, только тип не int, а плавающая арифметика/IP адрес, или прочий валидный разделитель типа '/'...

Об этих разделителях я позабочусь сам, мне нужна функция, которая не считает себя умнее меня.

P.S. Подчеркну, что strtol может «улететь» за границы куска памяти, если продолжение удовлетворяет std::isdigit(str[i]) с не-нуль терминированными строками это уже может быть опасно.