strtof, strtod, strtold
Определено в заголовочном файле <stdlib.h> |
||
|---|---|---|
float strtof( const char *restrict str, char **restrict str_end ); |
(с C99) | |
double strtod( const char *str, char **str_end ); |
(до C99) | |
double strtod( const char *restrict str, char **restrict str_end ); |
(с C99) | |
long double strtold( const char *restrict str, char **restrict str_end ); |
(с C99) |
Интерпретирует значение с плавающей запятой в строке байтов, на которую указывает str.
Функция пропускает все пробельные символы (как определяется isspace) до тех пор, пока не найдёт первый непробельный символ. Затем она берёт как можно больше символов, чтобы сформировать корректное представление с плавающей запятой, и преобразует их в значение с плавающей запятой. Корректное значение с плавающей запятой может быть одним из следующих:
- десятичное представление с плавающей запятой. Оно состоит из следующих частей:
- (необязательно) знак плюс или минус
- непустая последовательность десятичных цифр, необязательно содержащая десятичную точку (как определяется текущим C локаль) (определяет мантиссу)
- (необязательно)
eилиE, за которыми следует необязательный знак плюс или минус и непустая последовательность десятичных цифр (определяет показатель степени по основанию 10)
|
(с C99) |
- любое другое представление, которое может быть принято текущей установленной C локаль
Функции устанавливают указатель, на который указывает str_end, на символ, следующий за последним интерпретированным символом. Если str_end равен нулевому указателю, он игнорируется.
Параметры
| str | - | указатель на завершающую нулём строку байтов для интерпретации |
| str_end | - | указатель на указатель на символ. |
Возвращаемое значение
Значение с плавающей запятой, соответствующее содержимому str при успешном выполнении. Если преобразованное значение выходит за пределы диапазона соответствующего типа возврата, возникает ошибка диапазона (errno устанавливается в ERANGE) и возвращается HUGE_VAL, HUGE_VALF или HUGE_VALL. Если преобразование невозможно, возвращается 0.
Пример
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
int main(void)
{
// parsing with error handling
const char *p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz";
printf("Parsing '%s':\n", p);
char *end;
for (double f = strtod(p, &end); p != end; f = strtod(p, &end))
{
printf("'%.*s' -> ", (int)(end-p), p);
p = end;
if (errno == ERANGE){
printf("range error, got ");
errno = 0;
}
printf("%f\n", f);
}
// parsing without error handling
printf("\" -0.0000000123junk\" --> %g\n", strtod(" -0.0000000123junk", NULL));
printf("\"junk\" --> %g\n", strtod("junk", NULL));
}Возможный вывод:
Parsing '111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz': '111.11' -> 111.110000 ' -2.22' -> -2.220000 ' Nan' -> nan ' nan(2)' -> nan ' inF' -> inf ' 0X1.BC70A3D70A3D7P+6' -> 111.110000 ' 1.18973e+4932' -> range error, got inf " -0.0000000123junk" --> -1.23e-08 "junk" --> 0
Ссылки
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.22.1.3 Функции strtod, strtof и strtold (с. 249-251)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.22.1.3 Функции strtod, strtof и strtold (с. 342-344)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.20.1.3 Функции strtod, strtof и strtold (с. 308-310)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.10.1.4 Функция strtod
См. также
| преобразует строку байтов в значение с плавающей запятой (функция) |
|
|
(C99)(C95)(C99) |
преобразует широкую строку в значение с плавающей запятой (функция) |
Документация C++ для strtof, strtod, strtold |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/strtof