Partage via


_ecvt_s

Convertit un nombre double en chaîne. Cette fonction est une version des améliorations de _ecvt sécurité décrites dans les fonctionnalités de sécurité du CRT.

Syntaxe

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

Paramètres

buffer
Rempli avec le pointeur désignant la chaîne de chiffres, le résultat de la conversion.

sizeInBytes
Taille de la mémoire tampon en octets.

value
Nombre à convertir.

count
Nombre de chiffres stockés.

dec
Position de la virgule décimale stockée.

sign
Signe du nombre converti.

Valeur retournée

Zéro si l’opération aboutit. La valeur renvoyée est un code d’erreur en cas de défaillance. Les codes d’erreur sont définis dans Errno.h. Pour plus d'informations, voir errno, _doserrno, _sys_errlist et _sys_nerr.

S’il existe un paramètre non valide, comme indiqué dans le tableau suivant, cette fonction appelle le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, cette fonction a errno EINVALla valeur , et retourne EINVAL.

Conditions d’erreur

buffer sizeInBytes value count dec sign Valeur retournée Valeur dans buffer
NULL n'importe laquelle tous tous tous n'importe laquelle EINVAL Non modifiée.
Pas NULL (pointe vers une mémoire valide) <=0 n'importe laquelle tous tous n'importe laquelle EINVAL Non modifiée.
n'importe laquelle tous tous tous NULL n'importe laquelle EINVAL Non modifiée.
n'importe laquelle tous tous tous n'importe laquelle NULL EINVAL Non modifiée.

Problèmes de sécurité

_ecvt_s peut générer une violation d’accès si buffer elle ne pointe pas vers la mémoire valide et n’est pas NULL.

Notes

La fonction _ecvt_s convertit un nombre à virgule flottante en une chaîne de caractères. Le paramètre value est le nombre à virgule flottante à convertir. Cette fonction stocke jusqu’à count chiffres de value sous forme de chaîne et ajoute un caractère null (« \0 »). Si le nombre de chiffres dans value dépasse count, le chiffre de poids faible est arrondi. S’il y a moins de count chiffres, la chaîne est remplie de zéros.

Seuls des chiffres sont stockés dans la chaîne. La position de la virgule décimale et le signe de value peuvent être obtenus à partir de dec et sign après l’appel. Le paramètre dec pointe vers une valeur entière indiquant la position de la virgule décimale par rapport au début de la chaîne. Une valeur entière ou 0 indique que la virgule décimale est située à gauche du premier chiffre. Le paramètre sign pointe vers un entier qui indique le signe du nombre converti. Si la valeur entière est 0, le nombre est positif. Sinon, le nombre est négatif.

Une mémoire tampon de longueur _CVTBUFSIZE est suffisante pour n’importe quelle valeur à virgule flottante.

La différence entre _ecvt_s et _fcvt_s réside dans l’interprétation du paramètre count. _ecvt_s interprète count comme le nombre total de chiffres dans la chaîne de sortie, tandis que _fcvt_s interprète count en tant que nombre de chiffres après la virgule décimale.

En C++, l’utilisation de cette fonction est simplifiée par une surcharge de modèle ; la surcharge peut déduire automatiquement la longueur de la mémoire tampon, ce qui évite d’avoir à spécifier un argument de taille. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.

La version de débogage de cette fonction remplit d’abord la mémoire tampon avec 0xFE. Pour désactiver ce comportement, utilisez _CrtSetDebugFillThreshold.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Fonction En-tête requis En-tête facultatif
_ecvt_s <stdlib.h> <errno.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// 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

Voir aussi

Conversion de données
Prise en charge des fonctions mathématiques et à virgule flottante
atof, , _atof_l_wtof, ,_wtof_l
_ecvt
_fcvt_s
_gcvt_s