Compartir a través de


_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_errlisty _sys_nerr.

Condiciones de 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 NULLes .

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 plantillas 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

Consulte también

Conversión de datos
Compatibilidad con matemáticas y punto flotante
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_fcvt_s
_gcvt