_fcvt_s
Convierte un número en punto flotante en una cadena. Ésta es una versión de _fcvt con mejoras de seguridad como se describe en Características de seguridad de CRT.
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
[out] buffer
El búfer proporcionado que contendrá el resultado de la conversión.[in] sizeInBytes
El tamaño del búfer en bytes.[in] value
Número que se va a convertir.[in] count
Número de dígitos situados a continuación del signo decimal.[out] dec
Puntero a la posición de separador decimal almacenada.[out] sign
Puntero al marcador almacenado de signo.
Valor devuelto
Cero si correctamente. El valor devuelto es un código de error si hay un 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.
En el caso de un parámetro no válido, como se muestra en la tabla siguiente, esta función invoca el controlador no válido de parámetro, tal y 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 |
predeterminado |
count |
diciembre |
sign |
Devolución |
Valor de buffer |
---|---|---|---|---|---|---|---|
NULL |
any |
any |
any |
any |
any |
EINVAL |
No modificado. |
No NULL (señala memoria válido) |
<=0 |
any |
any |
any |
any |
EINVAL |
No modificado. |
any |
any |
any |
any |
NULL |
any |
EINVAL |
No modificado. |
any |
any |
any |
any |
any |
NULL |
EINVAL |
No modificado. |
Problemas de seguridad
_fcvt_s podría generar una infracción de acceso si buffer no señala memoria válida y no es NULL.
Comentarios
La función de _fcvt_s convierte un número en punto flotante a una cadena de caracteres terminada en null. El parámetro de 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 null (“\0”). El parámetro de count especifica el número de dígitos que se almacenarán después del separador decimal. Exceso de dígitos se redondean a to los lugares de count . Si hay menos que los dígitos de count de precisión, la cadena se rellena con ceros.
Sólo dígitos se almacenan en la cadena. La posición del separador decimal y el signo de value se pueden obtener de dec y de sign después de la llamada. Los puntos del parámetro de dec a un valor entero; este valor entero proporciona la posición del separador decimal en cuanto al principio de la cadena. Un valor entero cero o negativo indica que el separador decimal se encuentra a la izquierda del primer dígito. Los puntos de sign de parámetros 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 está en la del parámetro de count . _ecvt_s interpreta count como el número total de dígitos en la cadena de salida, y _fcvt_s interpreta la count como el número de dígitos después del separador decimal.
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 seguras.
La versión de depuración de esta función primero rellena el búfer con 0xFD. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.
Requisitos
Función |
Encabezado necesario |
Encabezado opcional |
---|---|---|
_fcvt_s |
<stdlib.h> |
<errno.h> |
Para obtener más información sobre compatibilidad, vea Compatibilidad en la introducción.
Bibliotecas: Todas las versiones de Características de la biblioteca CRT.
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);
}