_ecvt_s
Convertit un nombre d' double en chaîne.Il s'agit d'une version de _ecvt avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du CRT.
errno_t _ecvt_s(
char * _Buffer,
size_t _SizeInBytes,
double _Value,
int _Count,
int *_Dec,
int *_Sign
);
template <size_t size>
errno_t _ecvt_s(
char (&_Buffer)[size],
double _Value,
int _Count,
int *_Dec,
int *_Sign
); // C++ only
Paramètres
[out] _Buffer
Rempli avec le pointeur à la chaîne de chiffres, le résultat de la conversion.[in] _SizeInBytes
taille de la mémoire tampon en octets.[in] _Value
Nombre à convertir.[in] _Count
Nombre de chiffres enregistrés.[out] _Dec
position de virgule décimale stockée.[out] _Sign
Signe du nombre converti.
Valeur de retour
Zéro si l'opération a réussi.La valeur de retour est un code d'erreur si un échec.Les codes d'erreur sont définis dans Errno.h.Pour plus d'informations, consultez errno, _doserrno, _sys_errlist, et _sys_nerr.
Dans le cas d'un paramètre non valide, comme indiqué dans le tableau ci-dessous, cette fonction appelle le gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, les ensembles errno de cette fonction à EINVAL et retourne EINVAL.
conditions d'erreur
_Buffer |
_SizeInBytes |
_Value |
_Count |
_Dec |
_Sign |
Valeur de retour |
valeur dans buffer |
---|---|---|---|---|---|---|---|
NULL |
quels |
quels |
quels |
quels |
quels |
EINVAL |
non modifié. |
Pas NULL (pointe vers une mémoire non valide) |
<=0 |
quels |
quels |
quels |
quels |
EINVAL |
non modifié. |
quels |
quels |
quels |
quels |
NULL |
quels |
EINVAL |
non modifié. |
quels |
quels |
quels |
quels |
quels |
NULL |
EINVAL |
non modifié. |
problèmes de sécurité
_ecvt_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' _ecvt_s convertit un nombre à virgule flottante à une chaîne de caractères.le paramètre d' _Value est le nombre à virgule flottante à convertir.Cette fonction signale jusqu'à count des chiffres de _Value en tant que chaîne et ajoute un caractère Null (" \ 0 ").Si le nombre de chiffres dans _Value dépasse _Count, le chiffre de poids faible est arrondi.S'il y a moins de les chiffres d' count , la chaîne est effectuée avec des zéros non significatifs.
Uniquement des chiffres sont stockés dans la chaîne.La position de la virgule décimale et le signe d' _Value peuvent être obtenus à partir de _Dec et d' _Sign après l'appel.Les points de paramètre d' _Dec à une valeur entière indiquant la position de la virgule décimale par rapport à le début de la chaîne.Un 0 ou une valeur entière négative indique que la virgule décimale se trouve à gauche du premier chiffre.Les points de paramètre d' _Sign à un entier qui indique le signe du nombre converti.Si la valeur est 0, le nombre est positif.Sinon, le nombre 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 est dans la traduction du paramètre d' _Count ._ecvt_s interprète _Count à mesure que le nombre de chiffres dans la chaîne de sortie, alors qu' _fcvt_s_Count interprète comme un nombre de chiffres après la virgule décimale.
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
Fonction |
en-tête requis |
en-tête facultatif |
---|---|---|
_ecvt_s |
<stdlib.h> |
<errno.h> |
Pour plus d'informations de compatibilité, consultez Compatibilité dans l'introduction.
Exemple
// ecvt_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 = _ecvt_s(buf, _CVTBUFSIZE, 1.2, 5, &decimal, &sign);
if (err != 0)
{
printf("_ecvt_s failed with error code %d\n", err);
exit(1);
}
printf("Converted value: %s\n", buf);
}