_gcvt_s
convierte un valor de punto flotante a una cadena.Ésta es una versión de _gcvt con mejoras de seguridad como se describe en Características de seguridad en 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
Parámetros
[out] buffer
búfer para almacenar el resultado de la conversión.[in] sizeInBytes
Tamaño del búfer.[in] value
Valor que se va a convertir.[in] digits
número de dígitos significativos almacenados.
Valor devuelto
cero si correctamente.Si un error se produce debido a un parámetro no válido (vea la tabla siguiente por valores no válidos), se invoca el controlador no válido del parámetro tal como se describe en Validación de parámetros.Si la ejecución puede continuar, se devuelve un código de error.Los códigos de error se definen en Errno.h.Para obtener una lista de estos errores, vea errno, _doserrno, _sys_errlist, y _sys_nerr.
condiciones de error
buffer |
sizeInBytes |
value |
digits |
Return |
Valor de buffer |
---|---|---|---|---|---|
NULL |
cualquier |
cualquier |
cualquier |
EINVAL |
no modificado. |
No NULL (señala memoria válido) |
cero |
cualquier |
cualquier |
EINVAL |
no modificado. |
No NULL (señala memoria válido) |
cualquier |
cualquier |
>= sizeInBytes |
EINVAL |
no modificado. |
problemas de seguridad
_gcvt_s puede generar una infracción de acceso si buffer no señala memoria válida y no es NULL.
Comentarios
La función de _gcvt_s convierte value flotante en una cadena de caracteres (que incluye un separador decimal y un byte posible de signo) y almacena la cadena en buffer.buffer debe ser suficiente para alojar el valor convertido más un carácter null de terminación, que se agrega automáticamente.Un búfer de longitud _CVTBUFSIZE es suficiente para cualquier valor de punto flotante.Si un tamaño de búfer de digits + 1 se utiliza, la función no sobrescribirá el fin del búfer, de modo que esté seguro de proporcionar un búfer suficiente para esta operación._gcvt_s intenta generar los dígitos de digits en formato decimal.si no puede, genera los dígitos de digits en formato exponencial.los ceros finales se pueden suprimir en la conversión.
En C++, mediante esta función es simplificado por una sobrecarga de plantilla; la sobrecarga puede deducir longitud de búfer automáticamente, lo que elimina la necesidad de especificar un argumento size.Para obtener más información, vea Sobrecargas de plantilla de seguridad.
La versión de depuración de esta función primero rellena el búfer con 0xFD.Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.
Requisitos
rutina |
Encabezado necesario |
encabezado opcional |
---|---|---|
_gcvt_s |
<stdlib.h> |
<error.h> |
Para obtener más información de compatibilidad, vea Compatibilidad en la Introducción.
Ejemplo
// 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);
}