_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