_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_errlist
y _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 del 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 NULL
es .
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 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
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
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
_gcvt_s
_fcvt