В C ноль может быть и результатом разбора строки, и признаком того, что число вообще не удалось прочитать. Поэтому проверки только возвращённого значения недостаточно.
Автор разбора сравнивает поведение glibc и musl и требования ISO C и POSIX. Проверка одного
errno тоже не переносима: при строке без числа реализации могут сигнализировать по-разному.Для случая «ничего не разобрали» передавайте
endptr и сравнивайте его с началом входной строки. Переполнение и потеря слишком малого значения требуют отдельных проверок. Небольшой разбор о том, почему привычный библиотечный вызов стоит проверять вместе с его контрактом.🔗 Разбор strtod, найденный на Hacker News
🐸 Библиотека программиста