Поделиться через


strtold, _strtold_l, wcstold, _wcstold_l

Преобразует строки в значение long двойной точности с плавающей точкой.

Синтаксис

long double strtold(
   const char *strSource,
   char **endptr
);
long double _strtold_l(
   const char *strSource,
   char **endptr,
   _locale_t locale
);
long double wcstold(
   const wchar_t *strSource,
   wchar_t **endptr
);
long double wcstold_l(
   const wchar_t *strSource,
   wchar_t **endptr,
   _locale_t locale
);

Параметры

strSource
Строка, завершающаяся символом NULL, для преобразования.

endptr
Указатель на символ, который останавливает сканирование.

locale
Используемый языковой стандарт.

Возвращаемое значение

strtold возвращает значение числа long doubleс плавающей запятой, за исключением случаев, когда представление вызывает переполнение, в этом случае функция возвращает значение +/-HUGE_VALL. Знак соответствия знаку HUGE_VALL значения, которое не может быть представлено. strtold возвращает 0, если преобразование не может быть выполнено или происходит потеря значимости.

wcstold возвращает значения аналогично strtold. Для обеих функций задано значение, errno если возникает переполнение или переполнение, и вызывается обработчик недопустимых параметров, как описано в разделе проверкиERANGE параметров.

Дополнительные сведения о кодах возврата см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.

Замечания

Каждая функция преобразует входную строку strSource в long double. Функция strtold перестает читать строку strSource на первом символе, которую она не может распознать как часть числа. Это может быть конечный символ NULL. wcstold — это версия strtold с расширенными символами; ее аргумент strSource — строка расширенных символов. В остальном эти функции работают одинаково.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

Подпрограмма TCHAR.H _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tcstold strtold strtold wcstold
_tcstold_l _strtold_l _strtold_l _wcstold_l

Параметр категории LC_NUMERIC текущего языкового стандарта определяет распознавание символа основания системы счисления в strSource. Дополнительные сведения см. в разделе setlocale, _wsetlocale. Функции, не имеющие суффикса _l, используют текущий языковой стандарт; _strtold_l и _wcstold_l идентичны _strtold и _wcstold за исключением того, что они используют переданный им языковой стандарт. Дополнительные сведения см. в разделе Locale.

Если endptr это не NULLтак, указатель на символ, который остановил сканирование, хранится в расположении, на которое указывает endptr. Если не удается выполнить преобразование (не найдены допустимые цифры или указано недопустимое основание), значение strSource сохраняется в расположении, указанном endptr.

Функция strtold ожидает, что strSource указывает на строку следующего вида:

[whitespace][sign][digits][.digits] [{d | D | e | E}[sign]digits]

whitespace может содержать пробелы и символы табуляции, которые игнорируются; sign — это или плюс (+), или минус (-); digits — это одна или несколько десятичных цифр. Если перед символом основания системы счисления нет никаких цифр, то после него должна отображаться хотя бы одна цифра. За десятичными цифрами может следовать показатель степени, который состоит из вводной буквы (d, D, e или E) и при необходимости целого числа со знаком. Если экспонентная часть или радикс не отображается, предполагается, что символ радикса следует за последней цифрой в строке. Первый символ, который не соответствует этой форме, останавливает сканирование.

Требования

Маршрут Обязательный заголовок
strtold, _strtold_l <stdlib.h>
wcstold, _wcstold_l <stdlib.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_strtold.c
// Build with: cl /W4 /Tc crt_strtold.c
// This program uses strtold to convert a
// string to a long double-precision value.

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char *string;
   char *stopstring;
   long double x;

   string = "3.1415926535898This stopped it";
   x = strtold(string, &stopstring);
   printf("string = %s\n", string);
   printf("   strtold = %.13Lf\n", x);
   printf("   Stopped scan at: %s\n\n", stopstring);
}
string = 3.1415926535898This stopped it
   strtold = 3.1415926535898
   Stopped scan at: This stopped it

См. также

Преобразование данных
Поддержка математических и плавающих точек
Интерпретация последовательностей многобайтовых символов
Локаль
Строки в числовые функции значений
strtod, _strtod_l, wcstod, _wcstod_l
strtol, wcstol, _strtol_l, _wcstol_l
strtoul, _strtoul_l, wcstoul, _wcstoul_l
atof, _atof_l, _wtof, _wtof_l
localeconv
_create_locale, _wcreate_locale
_free_locale