_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_errlist
y _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 errno
EINVAL
en y devuelve EINVAL
.
Condiciones del 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 NULL
es .
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 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 |
---|---|---|
_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
Vea también
Conversión de datos
Compatibilidad con cálculos matemáticos y el punto flotante
atof
, _atof_l
, , _wtof
, _wtof_l
_ecvt
_fcvt_s
_gcvt_s