_fcvt_s

Convierte un número 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 _fcvt seguridad de CRT.

Sintaxis

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

Parámetros

buffer
Búfer proporcionado que contendrá el resultado de la conversión.

sizeInBytes
El tamaño del búfer , en bytes.

value
Número que se va a convertir.

count
Número de dígitos después del separador decimal.

dec
Puntero a la posición del separador decimal almacenada.

sign
Puntero al indicador de signo almacenado.

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 una lista de estos errores, vea errno, _doserrno, _sys_errlisty _sys_nerr.

Cuando 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, la función establece errno en EINVAL y devuelve EINVAL.

Condiciones de error

buffer sizeInBytes value count dec sign Return 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

_fcvt_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 _fcvt_s convierte un número de punto flotante en una cadena de caracteres finalizada en null. El parámetro value es el número de punto flotante que se va a convertir. _fcvt_s almacena los dígitos de value como cadena y anexa un carácter nulo ("\0"). El parámetro count especifica el número de dígitos que se almacenarán después del separador decimal. Los dígitos en exceso se redondean a count decimales. Si hay menos de count dígitos de precisión, 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; este valor entero proporciona la posición del separador decimal con respecto al principio de la cadena. Un valor entero de cero 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 de value. El entero se establece en 0 si value es positivo y se establece en un número distinto de cero si value 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 de la cadena de salida e _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
_fcvt_s <stdlib.h> <errno.h>

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

Bibliotecas: todas las versiones de las bibliotecas en tiempo de ejecución de C.

Ejemplo

// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

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

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

Consulte también

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