_gcvt_s
Converte un valore a virgola mobile in stringa. Questa funzione è una versione di con miglioramenti della _gcvt
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
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
buffer
Buffer per l'archiviazione del risultato della conversione.
sizeInBytes
Dimensioni del buffer .
value
Valore da convertire.
digits
Numero di cifre significative archiviate.
Valore restituito
Zero in caso di esito positivo. Se si verifica un errore a causa di un parametro non valido (vedere la tabella seguente per i valori non validi), viene richiamato il gestore di parametri non validi 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 |
Restituzione | Valore in buffer |
---|---|---|---|---|---|
NULL |
qualsiasi | qualsiasi | qualsiasi | EINVAL |
Non modificato. |
Non NULL (punta alla memoria valida) |
zero | qualsiasi | qualsiasi | EINVAL |
Non modificato. |
Non NULL (punta alla memoria valida) |
qualsiasi | qualsiasi | >= 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
è .
Osservazioni:
La funzione _gcvt_s
converte un elemento value
a virgola mobile in una stringa di caratteri (che include un separatore decimale e un possibile byte del segno) e archivia la stringa in buffer
. buffer
deve essere sufficientemente grande da contenere il carattere convertito oltre a un carattere Null di terminazione, che viene aggiunto automaticamente. Un buffer di lunghezza _CVTBUFSIZE
è sufficiente per qualsiasi valore a virgola mobile. Se viene usata una dimensione del buffer pari digits
a + 1, la funzione non sovrascriverà la fine del buffer, quindi assicurarsi di fornire un buffer sufficiente per questa operazione. _gcvt_s
tenta di produrre un numero di cifre pari a digits
in formato decimale. In caso contrario, produce digits
cifre in formato esponenziale. Gli zeri finali possono essere eliminati nella conversione.
In C++ l'uso di questa funzione è semplificato da un overload del modello. L'overload può dedurre la lunghezza del buffer automaticamente, evitando la necessità di specificare un argomento di dimensione. Per altre informazioni, vedere Proteggere gli overload dei modelli.
La versione di debug di questa funzione riempie prima di tutto il buffer con 0xFE. Per disabilitare questo comportamento, usare _CrtSetDebugFillThreshold
.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria | Intestazione facoltativa |
---|---|---|
_gcvt_s |
<stdlib.h> | <error.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (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);
}
Converted value: 1.2
Vedi anche
Conversione dati
Supporto matematico e a virgola mobile
atof
, _atof_l
, _wtof
_wtof_l
_ecvt_s
_fcvt_s
_gcvt