Condividi tramite


_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_errliste _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