_ecvt_s

Convierte un número double en una cadena. Esta función es una versión de con mejoras de seguridad, como se describe en Características de _ecvt seguridad de CRT.

Sintaxis

errno_t _ecvt_s(
   char * buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign
);
template <size_t size>
errno_t _ecvt_s(
   char (&buffer)[size],
   double value,
   int count,
   int *dec,
   int *sign
); // C++ only

Parámetros

buffer
Relleno con el puntero a la cadena de dígitos, el resultado de la conversión.

sizeInBytes
Tamaño del búfer en bytes.

value
Número que se va a convertir.

count
Número de dígitos almacenados.

dec
Posición del separador decimal almacenada.

sign
Signo del número que se convierte.

Valor devuelto

Cero si es correcta. Si se produce un error, el valor devuelto es un código de error. Los códigos de error se definen en Errno.h. Para obtener más información, veaerrno, _doserrno, _sys_errlisty _sys_nerr.

Si hay un parámetro no válido, como se muestra en la tabla siguiente, esta función invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, esta función establece errnoEINVALen y devuelve EINVAL.

Condiciones de error

buffer sizeInBytes value count dec sign Valor devuelto Valor de buffer
NULL cualquiera cualquiera cualquiera cualquiera cualquiera EINVAL No modificado.
No NULL (apunta a la memoria válida) <=0 cualquiera cualquiera cualquiera cualquiera EINVAL No modificado.
cualquiera cualquiera cualquiera cualquiera NULL cualquiera EINVAL No modificado.
cualquiera cualquiera cualquiera cualquiera cualquiera NULL EINVAL No modificado.

Problemas de seguridad

_ecvt_s podría generar una infracción de acceso si buffer no apunta a la memoria válida y no NULLes .

Comentarios

La función _ecvt_s convierte un número de punto flotante en una cadena de caracteres. El parámetro value es el número de punto flotante que se va a convertir. Esta función almacena hasta count dígitos de value como cadena y anexa un carácter nulo ("\0"). Si el número de dígitos de value supera count, se redondea el dígito de orden inferior. Si hay menos de count dígitos, la cadena se rellena con ceros.

Solo se almacenan dígitos en la cadena. La posición del separador decimal y el signo de value pueden obtenerse de dec y sign después de la llamada. El parámetro dec apunta a un valor entero que proporciona la posición del separador decimal con respecto al principio de la cadena. Un valor entero de 0 o negativo indica que el separador decimal se encuentra a la izquierda del primer dígito. El parámetro sign apunta a un entero que indica el signo del número que se convierte. Si el valor entero es 0, el número es positivo. De lo contrario, el número es negativo.

Un búfer de longitud _CVTBUFSIZE es suficiente para cualquier valor de punto flotante.

La diferencia entre _ecvt_s y _fcvt_s radica en la interpretación del parámetro count. _ecvt_s interpreta count como el número total de dígitos en la cadena de salida, mientras que _fcvt_s interpreta count como el número de dígitos después del separador decimal.

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

Función Encabezado necesario Encabezado opcional
_ecvt_s <stdlib.h> <errno.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// ecvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main( )
{
    char * buf = 0;
    int decimal;
    int sign;
    int err;

    buf = (char*) malloc(_CVTBUFSIZE);
    err = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

    if (err != 0)
    {
        printf("_ecvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 12000

Consulte también

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