Содержание | Глава 18

Функция strtod

#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()
Содержание | Глава 18