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


_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, and _sys_nerr.

Условия возникновения ошибки

buffer

sizeInBytes

value

digits

Return

Значение в buffer

NULL

any

any

any

EINVAL

Без изменений.

Не NULL (указывает на допустимый адрес памяти)

нуль

any

any

EINVAL

Без изменений.

Не NULL (указывает на допустимый адрес памяти)

any

any

>= sizeInBytes

EINVAL

Без изменений.

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

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

Заметки

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

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

Отладочная версия этой функции сначала заполняет буфер значением 0xFD. Для отключения данного поведения используйте _CrtSetDebugFillThreshold.

Требования

Подпрограмма

Обязательный заголовок

Необязательный заголовок

_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);  
  
}
  

Эквивалент в .NET Framework

ToString

См. также

Ссылки

Преобразование данных

Поддержка чисел с плавающей запятой

atof, _atof_l, _wtof, _wtof_l

_ecvt_s

_fcvt_s

_gcvt