_fcvt_s
Convertit un nombre à virgule flottante en une chaîne Il s'agit de versions de _fcvt avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.
errno_t _fcvt_s(
char* buffer,
size_t sizeInBytes,
double value,
int count,
int *dec,
int *sign
);
template <size_t size>
errno_t _fcvt_s(
char (&buffer)[size],
double value,
int count,
int *dec,
int *sign
); // C++ only
Paramètres
[out] buffer
La mémoire tampon fournie qui contiendra le résultat de la conversion.[in] sizeInBytes
Taille, en octets, de la mémoire tampon.[in] value
Nombre devant être converti.[in] count
Nombre de chiffres après la virgule.[out] dec
Pointeur vers l'emplacement de la virgule décimale stockée.[out] sign
Pointeur vers l'indicateur de signe stocké.
Valeur de retour
Zéro en cas de réussite. La valeur de retour est un code d'erreur en cas de échec. 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.
Dans le cas d'un paramètre non valide, comme indiqué dans le tableau suivant, cette fonction appelle le gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, cette fonction paramètre errno à EINVAL et renvoie EINVAL.
Conditions d'erreur
buffer |
sizeInBytes |
par défaut |
count |
dec |
sign |
Return |
Valeur dans buffer |
---|---|---|---|---|---|---|---|
NULL |
any |
any |
any |
any |
any |
EINVAL |
Non modifié |
Non NULL (pointe vers la mémoire valide) |
<=0 |
any |
any |
any |
any |
EINVAL |
Non modifié |
any |
any |
any |
any |
NULL |
any |
EINVAL |
Non modifié |
any |
any |
any |
any |
any |
NULL |
EINVAL |
Non modifié |
Problèmes de sécurité
_fcvt_s peut générer une violation d'accès si buffer ne pointe pas vers de la mémoire valide est n'est pas NULL.
Notes
La fonction _fcvt_s convertit un nombre à virgule flottante en une chaîne de caractères terminés par null. Le paramètre value est le nombre à virgule flottante à convertir. _fcvt_s stocke les chiffres de value en tant que chaîne et ajoute un caractère NULL ("\0 "). La paramètre count spécifie le nombre de chiffres à stocker après la virgule décimale. Les données en excès sont arrondis aux emplacements count. S'il y a moins de chiffres de précision quecount, la chaîne est complétées avec des zéros.
Seules les chiffres sont stockés dans la chaîne. La position de la virgule décimale et le signe devalue peuvent être obtenus à partir de dec et design après l'appel. Le paramètre decpointe sur une valeur entière donnant la position de la virgule décimale par rapport au début de la chaine. Un entier nul ou négatif indique que la virgule décimale se trouve à gauche du premier chiffre. Le paramètre sign pointe vers un entier qui indique le signe de value. L'entier est défini à 0 si value est positif est défini sur un nombre différent de zéro si value est négatif.
Une mémoire tampon de longueur _CVTBUFSIZE est suffisante pour toute valeur à virgule flottante.
La différence entre _ecvt_s et _fcvt_s réside dans la traduction du paramètre d'count. _ecvt_s interprète count comme le nombre total de chiffres dans la chaîne de sortie, et que_fcvt_s interprète count comme le nombre de chiffres après la virgule.
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
Fonction |
En-tête requis |
En-tête facultatif |
---|---|---|
_fcvt_s |
<stdlib.h> |
<errno.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.
Bibliothèques : toutes les versions Fonctions des bibliothèque CRT.
Exemple
// fcvt_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 = _fcvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_fcvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}