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


_fcvt_s

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

Синтаксис

errno_t _fcvt_s(
   char* buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign
);
template <size_t size>
errno_t _fcvt_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.

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

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

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

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

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

Замечания

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

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

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

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

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

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

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

Требования

Function Обязательный заголовок Необязательный заголовок
_fcvt_s <stdlib.h> <errno.h>

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

Библиотеки: все версии библиотек среды выполнения C.

Пример

// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

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

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

См. также

Преобразование данных
Поддержка математических и плавающих точек
atof, , _atof_l_wtof_wtof_l
_ecvt_s
_gcvt_s
_fcvt