Condividi tramite


_gcvt_s

Converte un valore in virgola mobile in una stringa.Si tratta di una versione di _gcvt con miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.

errno_t _gcvt_s( 
   char *buffer,
   size_t sizeInBytes,
   double value,
   int digits 
);
template <size_t cchStr>
errno_t _gcvt_s( 
   char (&buffer)[cchStr],
   double value,
   int digits 
); // C++ only

Parametri

  • [out] buffer
    Buffer per archiviare il risultato della conversione.

  • [in] sizeInBytes
    Dimensione del buffer.

  • [in] value
    Valore da convertire.

  • [in] digits
    Numero di cifre significative archiviate.

Valore restituito

Zero se ha esito positivo.Se si verifica un errore a causa di un parametro non valido (vedere la tabella seguente per un elenco dei valori non validi), verrà richiamato il gestore di parametro non valido come descritto in Convalida dei parametri.Se l'esecuzione può continuare, viene restituito un codice di errore.I codici di errore sono definiti in Errno.h.Per un elenco di questi errori, vedere errno, _doserrno, _sys_errlist e _sys_nerr.

Condizioni di errore

buffer

sizeInBytes

value

digits

Return

Valore in buffer

NULL

any

any

any

EINVAL

Non modificato.

Non NULL (punta alla memoria valida)

zero

any

any

EINVAL

Non modificato.

Non NULL (punta alla memoria valida)

any

any

>= sizeInBytes

EINVAL

Non modificato.

Problemi relativi alla sicurezza

_gcvt_s può generare una violazione di accesso se buffer non punta alla memoria valida e non è NULL.

Note

La funzione _gcvt_s converte un value in virgola mobile in una stringa di caratteri (che include un separatore decimale e un possibile byte di segno) e archivia la stringa in buffer.buffer deve essere grande a sufficienza per contenere il valore convertito più un carattere di terminazione null, che viene aggiunto automaticamente.Un buffer di lunghezza _CVTBUFSIZE è sufficiente per qualsiasi valore in virgola mobile.Se viene utilizzato un buffer di dimensioni digits + 1, la funzione non sovrascriverà la fine del buffer, pertanto assicurarsi di fornire un buffer di dimensioni sufficienti per l'operazione._gcvt_s tenta di generare le cifre digits in formato decimale.Se non è possibile, produce le cifre digits in formato esponenziale.Gli zeri finali possono essere eliminati nella conversione.

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 Assicurarsi che gli overload del modello.

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

Requisiti

Routine

Intestazione obbligatoria

Intestazione facoltativa

_gcvt_s

<stdlib.h>

<error.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.

Esempio

// crt_gcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
  char buf[_CVTBUFSIZE];
  int decimal;
  int sign;
  int err;

  err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);
  
  if (err != 0)
  {
     printf("_gcvt_s failed with error code %d\n", err);
     exit(1);
  }

  printf("Converted value: %s\n", buf);  
  
}
  

Equivalente .NET Framework

ToString

Vedere anche

Riferimenti

Conversione di dati

Supporto per le operazioni in virgola mobile

atof, _atof_l, _wtof, _wtof_l

_ecvt_s

_fcvt_s

_gcvt