_gcvt_s
Convertit une valeur à virgule flottante en une chaîne. Il s'agit de versions de _gcvt avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.
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
[out] buffer
Mémoire tampon pour stocker les résultats de la conversion.[in] sizeInBytes
Taille de la mémoire tampon.[in] value
Valeur à convertir.[in] digits
Nombre de chiffres significatifs stockés.
Valeur de retour
Zéro en cas de réussite. Si une défaillance se produit en raison d'un paramètre non valide (voir le tableau suivant pour les valeurs valides), le gestionnaire de paramètre non valide est appelée comme décrit dans Validation de paramètre. Si l'exécution est autorisée de continuer, le code d'erreur est retourné. Les codes d'erreur sont définis dans ERRNO.H. Pour obtenir la liste de ces erreurs, consultez errno, _doserrno, _sys_errlist et _sys_nerr.
Conditions d'erreur
buffer |
sizeInBytes |
value |
digits |
Return |
Valeur dans buffer |
---|---|---|---|---|---|
NULL |
any |
any |
any |
EINVAL |
Non modifié |
Non NULL (pointe vers la mémoire valide) |
zéro |
any |
any |
EINVAL |
Non modifié |
Non NULL (pointe vers la mémoire valide) |
any |
any |
>= sizeInBytes |
EINVAL |
Non modifié |
Problèmes de sécurité
_gcvt_s peut générer une violation d'accès si buffer ne pointe pas vers de la mémoire valide et n'est pas NULL.
Notes
La fonction _gcvt_s convertit un value à virgule flottante en une chaîne de caractères (incluant une virgule et éventuellement un octet de signe) et enregistre la chaîne dans buffer. buffer doit être suffisamment grande pour contenir la valeur convertie et un caractère NULL de fin, qui est ajouté automatiquement. Une mémoire tampon de longueur _CVTBUFSIZE est suffisante pour toute valeur à virgule flottante. Si une taille de mémoire tampon d'digits + 1 est utilisée, la fonction ne remplace pas la fin de la mémoire tampon, veillez à fournir un tampon suffisante pour cette opération. _gcvt_s tente de générer des chiffres digits au format décimal. S'il est impossible, il génère des chiffres digits au format exponentiel. Les zéros à droite peuvent être supprimés de la conversion.
En C++, l'utilisation de ces fonctions est simplifiée par des surcharges de modèle ; les surcharges peuvent également déduire la longueur de la mémoire tampon automatiquement, en éliminant le besoin de spécifier un argument de taille. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Les versions de déboggage de ces fonctions remplissent d'abord la mémoire tampon avec 0xFD. Pour désactiver ce comportement, utilisez _CrtSetDebugFillThreshold.
Configuration requise
Routine |
En-tête requis |
En-tête facultatif |
---|---|---|
_gcvt_s |
<stdlib.h> |
<error.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.
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);
}