_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
_doserrno
et _sys_nerr
.errno
Conditions d’erreur
buffer |
sizeInBytes |
value |
digits |
Retour | Valeur dans buffer |
---|---|---|---|---|---|
NULL |
n'importe laquelle | tous | n'importe laquelle | EINVAL |
Non modifiée. |
Pas NULL (pointe vers une mémoire valide) |
zero | n'importe laquelle | n'importe laquelle | EINVAL |
Non modifiée. |
Pas NULL (pointe vers une mémoire valide) |
n'importe laquelle | n'importe laquelle | >= 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 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
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 des fonctions mathématiques et à virgule flottante
atof
, , _atof_l
_wtof
, ,_wtof_l
_ecvt_s
_fcvt_s
_gcvt