История изменений
Исправление 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])
с не-нуль терминированными строками это уже может быть опасно.