_gcvt_s
Convierte un valor de punto flotante en una cadena. Esta función es una versión de con mejoras de seguridad, como se describe en Características de _gcvt
seguridad de CRT.
Sintaxis
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
buffer
Búfer en que se va a almacenar el resultado de la conversión.
sizeInBytes
Tamaño del búfer.
value
Valor que se va a convertir.
digits
Número de dígitos significativos almacenados.
Valor devuelto
Cero si es correcta. Si se produce un error debido a un parámetro no válido (consulte la tabla siguiente para los valores no válidos), se invoca el controlador de parámetros no válidos, 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 del error
buffer |
sizeInBytes |
value |
digits |
Return | Valor de buffer |
---|---|---|---|---|---|
NULL |
cualquiera | cualquiera | cualquiera | EINVAL |
No modificado. |
No NULL (apunta a la memoria válida) |
zero | cualquiera | cualquiera | EINVAL |
No modificado. |
No NULL (apunta a la memoria válida) |
cualquiera | cualquiera | >= sizeInBytes |
EINVAL |
No modificado. |
Cuestiones de seguridad
_gcvt_s
puede generar una infracción de acceso si buffer
no apunta a la memoria válida y no NULL
es .
Comentarios
La función _gcvt_s
convierte un value
de punto flotante en una cadena de caracteres (que incluye un separador decimal y un posible byte con signo) y almacena la cadena en buffer
. buffer
debe ser lo suficientemente grande como para contener el valor convertido más un carácter nulo final, que se anexa automáticamente. Un búfer de longitud _CVTBUFSIZE
es suficiente para cualquier valor de punto flotante. Si se usa un tamaño de búfer de digits
+ 1, la función no sobrescribirá el final del búfer, por lo que debe asegurarse de proporcionar un búfer suficiente para esta operación. _gcvt_s
intenta generar digits
dígitos en formato decimal. Si no es posible, genera digits
dígitos en formato exponencial. Los ceros finales pueden suprimirse en la conversión.
En C++, el uso de esta función se simplifica con una sobrecarga de plantilla. La sobrecarga puede deducir la longitud del búfer automáticamente, lo que elimina la necesidad de especificar un argumento de tamaño. Para obtener más información, consulte Sobrecargas de plantilla seguras.
La versión de depuración de esta función rellena primero el búfer con 0xFE. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold
.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Routine | Encabezado necesario | Encabezado opcional |
---|---|---|
_gcvt_s |
<stdlib.h> | <error.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
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);
}
Converted value: 1.2
Vea también
Conversión de datos
Compatibilidad con cálculos matemáticos y el punto flotante
atof
, _atof_l
, , _wtof
, _wtof_l
_ecvt_s
_fcvt_s
_gcvt