Condividi tramite


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