_ecvt_s
Convierte un número de double en una cadena. Ésta es una versión de _ecvt con mejoras de seguridad como se describe en Características de seguridad de CRT.
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
[out] _Buffer
Relleno con el puntero a la cadena de dígitos, el resultado de la conversión.[in] _SizeInBytes
Tamaño del búfer en bytes.[in] _Value
Número que se va a convertir.[in] _Count
Número de dígitos almacenados.[out] _Dec
Posición de separador decimal almacenada.[out] _Sign
Signo de número convertido.
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 más información, 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 |
_Value |
_Count |
_Dec |
_Sign |
Valor devuelto |
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
_ecvt_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 _ecvt_s convierte un número en punto flotante a una cadena de caracteres. El parámetro de _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 null (“\0”). Si el número de dígitos en _Value supera _Count, se redondea el dígito de orden inferior. Si hay menos que los dígitos de count , 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 que indica la posición del separador decimal con respecto al principio de la cadena. Un 0 o un valor entero negativo indica que el separador decimal se encuentra a la izquierda del primer dígito. Los puntos del parámetro de _Sign a un entero que indica el signo de número convertido. Si el valor entero es 0, el número es positivo. Si no, 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 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, mientras que _fcvt_s interpreta _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 |
---|---|---|
_ecvt_s |
<stdlib.h> |
<errno.h> |
Para obtener más información sobre compatibilidad, vea Compatibilidad en la introducción.
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);
}