_ecvt_s

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Convierte un double número a una cadena. Se trata de 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
Se rellena 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
Almacena la posición del punto decimal.

[out] _Sign
Signo de número convertido.

Cero si es correcta. El valor devuelto es un código de error si se produce un error. Códigos de error se definen en Errno.h. Para obtener más información, consulte errno, _doserrno, _sys_errlist y _sys_nerr.

En el caso de un parámetro no válido, como se muestra en la siguiente tabla, esta función invoca el controlador de parámetros no válidos, como se describe en validación del parámetro. Si la ejecución puede continuar, la función establece errno en EINVAL y devuelve EINVAL.

Condiciones de error

_Buffer_SizeInBytes_Value_Count_Dec_SignValor devueltoValor debuffer
NULLcualquieracualquieracualquieracualquieracualquieraEINVALNo se ha modificado.
No NULL (puntos de memoria válida)<=0anycualquieracualquieracualquieraEINVALNo se ha modificado.
anycualquieracualquieracualquieraNULLcualquieraEINVALNo se ha modificado.
anycualquieracualquieracualquieracualquieraNULLEINVALNo se ha modificado.

Problemas de seguridad

_ecvt_spuede generar una infracción de acceso si buffer no apunta a la memoria válido y no es NULL.

El _ecvt_s función convierte un número de punto flotante en una cadena de caracteres. El _Value parámetro es el número de punto flotante que se va a convertir. Esta función se almacena hasta count dígitos de _Value como una cadena y anexa un carácter nulo ('\0'). Si el número de dígitos en _Value supera _Count, se redondean los dígitos de orden inferior. Si hay menos de count dígitos, la cadena se rellena con ceros.

Solo los dígitos se almacenan en la cadena. La posición de decimales y el signo de _Value pueden obtenerse de _Dec y _Sign después de la llamada. El _Dec parámetro señala 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 _Sign parámetro señala a un entero que indica el signo de número convertido. 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 en la interpretación de la _Count parámetro. _ecvt_sinterpreta _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++, con esta función se simplifica con una sobrecarga de plantilla; la sobrecarga puede deducir la longitud de búfer automáticamente, lo que elimina la necesidad de especificar un argumento de tamaño. Para obtener más información, consulta Secure Template Overloads.

En primer lugar, la versión de depuración de esta función rellena el búfer con 0xFD. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold.

FunciónEncabezado necesarioEncabezado opcional
_ecvt_s<stdlib.h><errno.h>

Para obtener más información sobre compatibilidad, vea Compatibility en la introducción.

// 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  

ToString

Conversión de datos
Compatibilidad de punto flotante
atof, _atof_l, _wtof, _wtof_l
_ecvt
_fcvt_s
_gcvt_s

Mostrar: