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


_gcvt_s

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

Синтаксис

errno_t _gcvt_s(
   char *buffer,
   size_t sizeInBytes,
   double value,
   int digits
);
template <size_t cchStr>
errno_t _gcvt_s(
   char (&buffer)[cchStr],
   double value,
   int digits
); // C++ only

Параметры

buffer
Буфер для сохранения результата преобразования.

sizeInBytes
Размер буфера.

value
Преобразуемое значение.

digits
Количество значащих цифр хранятся.

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

Нуль при успешном завершении. Если сбой возникает из-за недопустимого параметра (см. следующую таблицу для недопустимых значений), обработчик недопустимых параметров вызывается, как описано в разделе "Проверка параметров". Если продолжение выполнения разрешено, возвращается код ошибки. Коды ошибок определяются в файле ERRNO.H. Список этих ошибок см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.

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

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

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

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

Замечания

Функция _gcvt_s преобразует значение с плавающей запятой value в строку символов (включает знак десятичной запятой и при необходимости байт знака) и сохраняет эту строку в buffer. Длина buffer должна быть достаточной для хранения преобразованного значения, а также автоматически добавляемого нуль-символа. Буфер длины _CVTBUFSIZE достаточен для любого значения с плавающей запятой. Если используется размер digits буфера + 1, функция не перезаписывает конец буфера, поэтому обязательно укажите достаточный буфер для этой операции. Функция _gcvt_s пытается создать digits разрядов в десятичном формате. Если он не удается, он создает digits цифры в экспоненциальном формате. Нули в конце могут исключаться из преобразования.

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

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

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

Требования

Маршрут Обязательный заголовок Необязательный заголовок
_gcvt_s <stdlib.h> <error.h>

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

Пример

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

int main()
{
    char buf[_CVTBUFSIZE];
    int decimal;
    int sign;
    int err;

    err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);

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

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

См. также

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