Condividi tramite


_ecvt_s

Converte un numero double in una stringa. Si tratta di una versione di _ecvt con miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in 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

Parametri

  • [out] _Buffer
    Riempito con il puntatore alla stringa di cifre, il risultato della conversione.

  • [in] _SizeInBytes
    Dimensione, in byte, del buffer.

  • [in] _Value
    Numeri da convertire.

  • [in] _Count
    Numero di cifre archiviato.

  • [out] _Dec
    Posizione archiviata del separatore decimale.

  • [out] _Sign
    Il segno del numero convertito.

Valore restituito

Zero se ha esito positivo. Il valore restituito è un codice di errore in presenza di un fallimento. I codici di errore sono definiti in Errno.h. Per ulteriori informazioni, vedere errno, _doserrno, _sys_errlist, and _sys_nerr.

Nel caso di un parametro non valido, come indicato nella seguente tabella, questa funzione viene richiamata dal gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione imposta errno e imposta EINVAL su EINVAL.

Condizioni di errore

_Buffer

_SizeInBytes

_Value

_Count

_Dec

_Sign

Valore restituito

Valore in buffer

NULL

any

any

any

any

any

EINVAL

Non modificato.

Non NULL (punta alla memoria valida)

<=0

any

any

any

any

EINVAL

Non modificato.

any

any

any

any

NULL

any

EINVAL

Non modificato.

any

any

any

any

any

NULL

EINVAL

Non modificato.

Problemi relativi alla sicurezza

_ecvt_s potrebbe generare una violazione di accesso se buffer non punta alla memoria valida e non è NULL.

Note

La funzione _ecvt_s converte un numero a virgola mobile in una stringa di caratteri terminata da null. Il parametro _Value è il numero a virgola mobile da convertire. Questa funzione memorizza fino a count cifre di _Value come stringa e aggiunge un carattere null ('\0'). Se il numero di cifre in _Value supera _Count, la cifra meno significativa viene arrotondata. Se sono presenti meno di count cifre, la stringa viene completata con degli zeri.

Solo le cifre vengono archiviate nella stringa. La posizione del separatore decimale e il segno di _Value possono essere ottenuti da _Dec e _Sign dopo la chiamata. Il parametro _Dec punta ad un valore Integer che fornisce la posizione del separatore decimale rispetto all'inizio della stringa. Un Integer 0 o negativo indica che il separatore decimale si trova a sinistra della prima cifra. I punti del parametro _Sign su un intero che indica il segno del numero convertito. Se il valore Integer è 0, il numero è positivo. In caso contrario, il numero è negativo.

Un buffer di lunghezza _CVTBUFSIZE è sufficiente per qualsiasi valore in virgola mobile.

La differenza tra _ecvt_s e _fcvt_s risiede nell'interpretazione del parametro _Count. _ecvt_s interpreta _Count come il numero totale di cifre contenute nella stringa di output, mentre _fcvt_s interpreta _Count come il numero di cifre dopo il separatore decimale.

In C++, l'utilizzo di questa funzione viene semplificato da un overload del modello; l'overload può dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento per la dimensione. Per ulteriori informazioni, vedere Overload di modelli sicuri.

La versione di debug della funzione per prima cosa inserisce nel buffer il valore 0xFD. Per disattivare questo comportamento, utilizzare _CrtSetDebugFillThreshold.

Requisiti

Funzione

Intestazione obbligatoria

Intestazione facoltativa

_ecvt_s

<stdlib.h>

<errno.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.

Esempio

// 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);  
  
}
  

Equivalente .NET Framework

ToString

Vedere anche

Riferimenti

Conversione dei dati

Supporto a virgola mobile

atof, _atof_l, _wtof, _wtof_l

_ecvt

_fcvt_s

_gcvt_s