_fcvt_s

Converte un numero a virgola mobile in una stringa. Questa funzione è una versione di con miglioramenti della _fcvt sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

errno_t _fcvt_s(
   char* buffer,
   size_t sizeInBytes,
   double value,
   int count,
   int *dec,
   int *sign
);
template <size_t size>
errno_t _fcvt_s(
   char (&buffer)[size],
   double value,
   int count,
   int *dec,
   int *sign
); // C++ only

Parametri

buffer
Buffer specificato che conterrà il risultato della conversione.

sizeInBytes
Dimensioni del buffer in byte.

value
Numero da convertire.

count
Numero di cifre dopo il separatore decimale.

dec
Puntatore alla posizione del separatore decimale archiviata.

sign
Puntatore all'indicatore di segno archiviato.

Valore restituito

Zero in caso di esito positivo. Il valore restituito è un codice di errore in caso di errore. I codici di errore sono definiti in errno.h. Per un elenco di questi errori, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Quando è presente un parametro non valido, come indicato nella tabella seguente, questa funzione richiama il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione imposta errno suEINVAL e restituisce EINVAL.

Condizioni di errore

buffer sizeInBytes value count dec sign Restituzione Valore in buffer
NULL qualsiasi qualsiasi qualsiasi qualsiasi qualsiasi EINVAL Non modificato.
Non NULL (punta alla memoria valida) <=0 qualsiasi qualsiasi qualsiasi qualsiasi EINVAL Non modificato.
qualsiasi qualsiasi qualsiasi qualsiasi NULL qualsiasi EINVAL Non modificato.
qualsiasi qualsiasi qualsiasi qualsiasi qualsiasi NULL EINVAL Non modificato.

Problemi di sicurezza

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

Osservazioni:

La funzione _fcvt_s converte un numero a virgola mobile in una stringa di caratteri che termina con NULL. Il parametro value è il numero a virgola mobile da convertire. _fcvt_s archivia le cifre di value come stringa e aggiunge un carattere null ('\0'). Il parametro count specifica il numero di cifre da archiviare dopo il separatore decimale. Le cifre in eccesso vengono arrotondate a count posti. Se ci sono meno di count cifre, la stringa viene riempita con zeri.

Nella stringa vengono archiviate solo cifre. La posizione del separatore decimale e il segno di value possono essere ottenuti da dec e sign dopo la chiamata. Il parametro dec punta a un valore intero. Questo valore intero indica la posizione del separatore decimale rispetto all'inizio della stringa. Uno zero o un valore intero negativo indica che il separatore decimale si trova a sinistra della prima cifra. Il parametro sign punta a un numero intero che indica il segno di value. L'intero viene impostato su 0 se value è positivo e viene impostato su un numero diverso da zero se value è negativo.

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

La differenza tra _ecvt_s e _fcvt_s consiste nell'interpretazione del parametro count. _ecvt_scount interpreta come numero totale di cifre nella stringa di output e _fcvt_s interpreta count come numero di cifre dopo il separatore decimale.

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

Funzione Intestazione obbligatoria Intestazione facoltativa
_fcvt_s <stdlib.h> <errno.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Librerie: tutte le versioni delle librerie di runtime C.

Esempio

// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);

    if (err != 0)
    {
        printf("_fcvt_s failed with error code %d\n", err);
        exit(1);
    }

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

Vedi anche

Conversione dei dati
Supporto matematico e a virgola mobile
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_gcvt_s
_fcvt