Я рассматриваю использовать функцию strtod(), чтобы преобразовать строку в двойной в C, который является siganture:strtod() двусмысленность: Ошибка формата и ноль преобразование
double strtod (const char* str, char** endptr);
str
будет строка, которая будет преобразована и endptr
указатель, который должен быть установлен на первый символ после номера.
Документация говорит:
В случае успеха функция возвращает преобразованное число с плавающей запятой в качестве значения типа двойной. Если действительное преобразование не было выполнено, функция возвращает ноль (0.0).
Таким образом, насколько я понимаю, это не представляется возможным обнаружить ситуации, в которых str
имеет ошибку формата (например, «Foo», «-3ab» или «3O3») от ситуаций, в которых str
представляет 0 (например, «0», «0.000», «-0.0», «0e10»).
Как можно использовать функцию strtod(), чтобы избежать этой проблемы при преобразовании нуля?
EDIT: Я видел аналогичный вопрос here. Тем не менее, я думаю, что я не спрашиваю об этом, так как мой вопрос касается проблемы двусмысленности между 0 и ошибочно сформированной строкой, в то время как другая статья касается обнаружения ошибок формирования в целом.
Дубликат http://stackoverflow.com/questions/5580975/problem-with-string-conversion-to-number-strtod –
Смотрите также [Обоснование позади C библиотеки никогда не устанавливают значение errno в ноль] (http://programmers.stackexchange.com/a/209731) – wimh
И смотрите [Обнаружение strtol failure] (http://stackoverflow.com/a/26083517/33499) как 'strtol 'ведет себя как' strtod' – wimh