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