#include <stdlib.h>
double strtod(const char *start, char **end);
Функция strtod() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром start, в значение типа double и возвращает полученный результат.
В версии С99 к параметрам start и end применен квалификатор restrict.
Функция strtod() работает следующим образом:
Сначала в строке, адресуемой параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считываются символы, составляющие число. Когда считывается символ, который не может встречаться в записи числа с плавающей точкой, считывание прекращается. К таким символам относятся пробелы, символы табуляции и пустой строки, знаки препинания (но не точки) и символы, отличные от букв «Е» и «е». Наконец, параметр-указатель end устанавливается так, чтобы указывать на «неиспользованный» остаток исходной строки, если таковой существует. Это означает, что, если функция strtod() вызывается с аргументом
"100.00 плоскогубцев"
то она возвратит значение
100.00
а параметр-указатель end будет указывать на пробел, предшествующий слову
"плоскогубцев"
При возникновении переполнения функция strtod() возвращает либо значение HUGE_VAL, либо значение -HUGE_VAL (означающее положительное или отрицательное переполнение соответственно), а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода результата за пределы представимых чисел. При потере значимости возвращается нуль, а глобальная переменная errno устанавливается равной значению ERANGE. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
Пример
Следующая программа читает числа с плавающей точкой из массива символов.
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
int main(void)
{
char *end, *start = "100.00 плоскогубцев 200.00 молотков";
end = start;
while(*start) {
printf("%f, ", strtod(start, &end));
printf("Остаток: %s\n" ,end);
start = end;
/* пропускает символы не входящие в числа */
while(!isdigit(*start) && *start) start++;
}
return 0;
}
Вот что выводит эта программа:
100.000000, Остаток: плоскогубцев 200.00 молотков
200.000000, Остаток: молотков
Зависимые функции
atof() strtold() strtof()