Partager via


_gcvt_s

Convertit une valeur à virgule flottante en chaîne. Cette fonction est une version des améliorations de _gcvt sécurité, comme décrit dans les fonctionnalités de sécurité du CRT.

Syntaxe

errno_t _gcvt_s(
   char *buffer,
   size_t sizeInBytes,
   double value,
   int digits
);
template <size_t cchStr>
errno_t _gcvt_s(
   char (&buffer)[cchStr],
   double value,
   int digits
); // C++ only

Paramètres

buffer
Mémoire tampon pour stocker le résultat de la conversion.

sizeInBytes
Taille de la mémoire tampon.

value
Valeur à convertir.

digits
Nombre de chiffres significatifs stockés.

Valeur retournée

Zéro si l’opération aboutit. Si un échec se produit en raison d’un paramètre non valide (consultez le tableau suivant pour les valeurs non valides), le gestionnaire de paramètres non valide est appelé comme décrit dans la validation des paramètres. Si l’exécution est autorisée à se poursuivre, un code d’erreur est retourné. Les codes d’erreur sont définis dans Errno.h. Pour obtenir la liste de ces erreurs, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Conditions de l’erreur

buffer sizeInBytes value digits Renvoie Valeur dans buffer
NULL tous tous tous EINVAL Non modifiée.
Pas NULL (pointe vers une mémoire valide) zero tous tous EINVAL Non modifiée.
Pas NULL (pointe vers une mémoire valide) tous tous >= sizeInBytes EINVAL Non modifiée.

Problèmes de sécurité

_gcvt_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 _gcvt_s convertit une value à virgule flottante en une chaîne de caractères (qui inclut une virgule décimale et, éventuellement, un octet de signe) et stocke la chaîne dans buffer. buffer doit être assez grand pour contenir la valeur convertie, plus un caractère Null de fin, qui est ajouté automatiquement. Une mémoire tampon de longueur _CVTBUFSIZE est suffisante pour n’importe quelle valeur à virgule flottante. Si une taille de mémoire tampon de digits + 1 est utilisée, la fonction ne remplace pas la fin de la mémoire tampon. Veillez donc à fournir une mémoire tampon suffisante pour cette opération. _gcvt_s tente de produire digits chiffres au format décimal. Si ce n’est pas le cas, il produit des digits chiffres au format exponentiel. Les zéros de fin peuvent être supprimés pendant la conversion.

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 Surcharges de modèles sécurisés.

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

Routine En-tête requis En-tête facultatif
_gcvt_s <stdlib.h> <error.h>

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

Exemple

// crt_gcvt_s.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main()
{
    char buf[_CVTBUFSIZE];
    int decimal;
    int sign;
    int err;

    err = _gcvt_s(buf, _CVTBUFSIZE, 1.2, 5);

    if (err != 0)
    {
        printf("_gcvt_s failed with error code %d\n", err);
        exit(1);
    }

    printf("Converted value: %s\n", buf);
}
Converted value: 1.2

Voir aussi

Conversion de données
Prise en charge mathématique et à virgule flottante
atof, _atof_l, _wtof, _wtof_l
_ecvt_s
_fcvt_s
_gcvt