_ecvt_s
Converte un oggetto double numero in una stringa.Si tratta di una versione di _ecvt con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.
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
[out] _Buffer
Riempito con un puntatore alla stringa di cifre, il risultato della conversione.[in] _SizeInBytes
Dimensione del buffer in byte.[in] _Value
Numero da convertire.[in] _Count
Numero di cifre archiviate.[out] _Dec
Posizione del separatore decimale archiviata.[out] _Sign
Segno del numero convertito.
Valore restituito
Zero se ha esito positivo.Il valore restituito è un codice di errore se c " è un errore.I codici di errore definiti in Errno.h.Per ulteriori informazioni, vedere errno, _doserrno, _sys_errlist e _sys_nerr.
Nel caso di un parametro non valido, come indicato nella seguente tabella, questa funzione viene richiamato il gestore non valido di parametro, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, set di questa funzione errno in 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 indica la memoria valida e non viene NULL.
Note
_ecvt_s la funzione consente di convertire un numero a virgola mobile in una stringa di caratteri._Value il parametro è il numero a virgola mobile da convertire.Questa funzione contiene fino a count cifre di _Value come stringa e viene aggiunto un carattere null (" \ 0 ").Se il numero di cifre in _Value percorso _Count, la cifra meno significativa viene arrotondata.Se vi sono meno che count le cifre, la stringa viene applicato il riempiti con zeri.
Solo cifre vengono archiviate nella stringa.La posizione del separatore decimale e il segno di _Value può essere ottenuto da _Dec e _Sign dopo la chiamata._Dec punti di parametro su un valore intero che rappresenta la posizione del separatore decimale in relazione all'inizio della stringa.Un 0 o un valore Integer negativo indica che il separatore decimale si trova a sinistra della prima cifra._Sign punti di parametro su un intero che indica il segno del numero convertito.se il valore Integer è 0, il numero è positivo.In caso contrario, il numero è negativo.
Un buffer di lunghezza _CVTBUFSIZE è sufficiente per qualsiasi valore a virgola mobile.
La differenza tra _ecvt_s e _fcvt_s è nell'interpretazione di _Count parametro._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'utilizzo di questa funzione viene semplificata da un overload del modello; l'overload è in grado di dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento di dimensione.Per ulteriori informazioni, vedere Assicurarsi che gli overload del modello.
La versione di debug della funzione prima inseriti nel buffer del valore 0xFD.Per disabilitare questo comportamento, utilizzare _CrtSetDebugFillThreshold.
Requisiti
Funzione |
Intestazione di associazione |
intestazione facoltativa |
---|---|---|
_ecvt_s |
<definito> |
<errno.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
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);
}