_ecvt_s
Converte un numero double
in una stringa. Questa funzione è una versione di con miglioramenti della _ecvt
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
errno_t _ecvt_s(
char * buffer,
size_t sizeInBytes,
double value,
int count,
int *dec,
int *sign
);
template <size_t size>
errno_t _ecvt_s(
char (&buffer)[size],
double value,
int count,
int *dec,
int *sign
); // C++ only
Parametri
buffer
Contiene il puntatore alla stringa di cifre, il risultato della conversione.
sizeInBytes
Dimensione del buffer in byte.
value
Numero da convertire.
count
Numero di cifre archiviate.
dec
Posizione del separatore decimale archiviata.
sign
Segno del numero convertito.
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 altre informazioni, vedereerrno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Se è 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, questa funzione imposta errno
su EINVAL
e restituisce EINVAL
.
Condizioni di errore
buffer |
sizeInBytes |
value |
count |
dec |
sign |
Valore restituito | 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
_ecvt_s
potrebbe generare una violazione di accesso se buffer
non punta alla memoria valida e non NULL
è .
Osservazioni:
La funzione _ecvt_s
converte un numero a virgola mobile in una stringa di caratteri. Il parametro value
è il numero a virgola mobile da convertire. Questa funzione consente di archiviare fino a count
cifre di value
come stringa e aggiunge un carattere null ('\0'). Se il numero di cifre in value
supera count
, la cifra meno significativa viene arrotondata. 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 che 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 valore intero che indica il segno del numero convertito. Se il valore intero è 0, il numero è positivo. In caso contrario, il risultato sarà 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
interpreta count
come numero totale di cifre nella stringa di output, mentre _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 |
---|---|---|
_ecvt_s |
<stdlib.h> | <errno.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// ecvt_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 = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_ecvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}
Converted value: 12000
Vedi anche
Conversione dati
Supporto matematico e a virgola mobile
atof
, _atof_l
, _wtof
_wtof_l
_ecvt
_fcvt_s
_gcvt_s