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


_ecvt_s

Преобразует число double в строку. Эта функция представляет собой версию улучшений _ecvt безопасности, как описано в функциях безопасности в CRT.

Синтаксис

errno_t _ecvt_s(
   char * buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign
);
template <size_t size>
errno_t _ecvt_s(
   char (&buffer)[size],
   double value,
   int count,
   int *dec,
   int *sign
); // C++ only

Параметры

buffer
Заполняется указателем на строку разрядов, результат преобразования.

sizeInBytes
Размер буфера в байтах.

value
Число, которое требуется преобразовать.

count
Сохраненное число разрядов.

dec
Сохраненная позиция десятичной запятой.

sign
Знак преобразованного числа.

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

Нуль при успешном завершении. Возвращаемое значение — это код ошибки, если произошел сбой. Коды ошибок определяются в файле ERRNO.H. Дополнительные сведения см. в разделе errno, _doserrno, _sys_errlist, и _sys_nerr.

Если есть недопустимый параметр, как указано в следующей таблице, эта функция вызывает обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение разрешено продолжать, эта функция задает errnoEINVALзначение и возвращает.EINVAL

Условия ошибок

buffer sizeInBytes value count dec sign Возвращаемое значение Значение в buffer
NULL любое любое любое любое любое EINVAL Не изменено.
Не NULL (указывает на допустимый адрес в памяти) <=0 любое любое любое любое EINVAL Не изменено.
любое любое любое любое NULL любое EINVAL Не изменено.
любое любое любое любое любое NULL EINVAL Не изменено.

Проблемы с безопасностью

_ecvt_s Может создать нарушение доступа, если buffer не указывает на допустимую память и не NULLявляется.

Замечания

Функция _ecvt_s преобразует число с плавающей запятой в строку символов. Параметр value представляет собой преобразуемое число с плавающей запятой. Эта функция сохраняет до count разрядов параметра value в виде строки и добавляет нуль-символ ("\0"). Если количество разрядов в value превышает count, младший разряд округляется. Если количество разрядов меньше count, строка дополняется нулями.

В строке сохраняются только цифры. Положение десятичной запятой и знак value можно получить из параметров dec и sign после вызова. Параметр dec указывает на целочисленное значение, отражающее положение десятичной запятой относительно начала строки. Ноль или отрицательное целое число означают, что десятичная запятая располагается слева от первой цифры. Параметр sign указывает на целое число, определяющее знак преобразуемого числа. Если целочисленное значение равно 0, число является положительным. В противном случае число будет отрицательным.

Буфер длины _CVTBUFSIZE достаточен для любого значения с плавающей запятой.

Различие между функциями _ecvt_s и _fcvt_s заключается в интерпретации параметра count. Функция _ecvt_s интерпретирует параметр count как общее число цифр в выходной строке, а функция _fcvt_s интерпретирует параметр count как количество цифр после десятичной запятой.

В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устраняя необходимость указывать аргумент size. Дополнительные сведения см. в разделе "Безопасные перегрузки шаблонов".

Отладочная версия этой функции сначала заполняет буфер 0xFE. Чтобы отключить это поведение, используйте _CrtSetDebugFillThreshold.

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

Требования

Функция Обязательный заголовок Необязательный заголовок
_ecvt_s <stdlib.h> <errno.h>

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

Пример

// ecvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main( )
{
    char * buf = 0;
    int decimal;
    int sign;
    int err;

    buf = (char*) malloc(_CVTBUFSIZE);
    err = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

    if (err != 0)
    {
        printf("_ecvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 12000

См. также

Преобразование данных
Поддержка математических и плавающих точек
atof, _atof_l, _wtof, _wtof_l
_ecvt
_fcvt_s
_gcvt_s