_gcvt_s
Convertit une valeur à virgule flottante en chaîne.Il s'agit d'une version de _gcvt avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du 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 le résultat de la conversion.[in] sizeInBytes
taille de la mémoire tampon.[in] value
Valeur à convertir.[in] digits
Nombre de chiffres significatifs enregistrés.
Valeur de retour
Zéro si l'opération a réussi.Si une erreur se produit en raison d'un paramètre non valide (consultez le tableau suivant pour les valeurs valides), le gestionnaire de paramètre non valide est appelé comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, le code d'erreur est retourné.Les codes d'erreur sont définis dans Errno.h.Pour obtenir la liste de ces erreurs, consultez l' errno, _doserrno, _sys_errlist, et _sys_nerr.
conditions d'erreur
buffer |
sizeInBytes |
value |
digits |
Return |
valeur dans buffer |
---|---|---|---|---|---|
NULL |
quels |
quels |
quels |
EINVAL |
non modifié. |
Pas NULL (pointe vers une mémoire non valide) |
zéro |
quels |
quels |
EINVAL |
non modifié. |
Pas NULL (pointe vers une mémoire non valide) |
quels |
quels |
>= sizeInBytes |
EINVAL |
non modifié. |
problèmes de sécurité
_gcvt_s peut générer une violation d'accès si buffer n'indique pas une mémoire non valide et n'est pas NULL.
Notes
La fonction d' _gcvt_s convertit value à virgule flottante à une chaîne de caractères (qui inclut une virgule et un octet possible de signe) et enregistre la chaîne dans buffer.buffer doit être assez grand pour recevoir à la valeur convertie plus 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 la mémoire tampon d' digits + 1 est utilisée, la fonction ne remplace pas la fin de la mémoire tampon, ce soit veillez donc à fournir une mémoire tampon suffisante pour cette opération.tente d'_gcvt_s de produire des chiffres de digits au format décimal.Si ce n'est pas le cas, elle produit des chiffres de digits au format exponentiel.Les zéros de fin peuvent être supprimées de la conversion.
En C++, grâce à cette fonction est simplifié par une surcharge de modèle ; la surcharge peut 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 Surcharges sécurisées de modèle.
La version debug de cette fonction remplit tout d'abord 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 de 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);
}