_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_errlist
e _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_s
count
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 dati
Supporto matematico e a virgola mobile
atof
, _atof_l
, _wtof
_wtof_l
_ecvt_s
_gcvt_s
_fcvt