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