Namespaces
Variants

strfromf, strfromd, strfroml

From cppreference.net
< c ‎ | string ‎ | byte
Défini dans l'en-tête <stdlib.h>
int strfromf ( char * restrict s, size_t n, const char * restrict format, float fp ) ;
(depuis C23)
int strfromd ( char * restrict s, size_t n, const char * restrict format, double fp ) ;
(depuis C23)
int strfroml ( char * restrict s, size_t n, const char * restrict format, long double fp ) ;
(depuis C23)

Convertit une valeur en virgule flottante en une chaîne d'octets.

Les fonctions sont équivalentes à snprintf ( s, n, format, fp ) , sauf que la chaîne de format ne doit contenir que le caractère % , une précision facultative ne contenant pas d'astérisque * , et l'un des spécificateurs de conversion a , A , e , E , f , F , g , ou G , qui s'applique au type double , float , ou long double ) indiqué par le suffixe de la fonction (plutôt que par un modificateur de longueur). L'utilisation de ces fonctions avec toute autre chaîne de format entraîne un comportement indéfini.

Table des matières

Paramètres

s - pointeur vers une chaîne de caractères à écrire
n - jusqu'à n - 1 caractères peuvent être écrits, plus le terminateur nul
format - pointeur vers une chaîne d'octets terminée par un nul spécifiant comment interpréter les données
fp - valeur en virgule flottante à convertir

Valeur de retour

Le nombre de caractères qui auraient été écrits si n avait été suffisamment grand, sans compter le caractère nul de terminaison. Ainsi, la sortie avec terminaison nulle a été complètement écrite si et seulement si la valeur retournée est à la fois non négative et inférieure à n .

Exemple

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char buffer[32];
    int written;
    const char* format[] = {"%a", "%A", "%e", "%E", "%f", "%F", "%g", "%G"};
    for (size_t fmt = 0; fmt != sizeof format / sizeof format[0]; ++fmt)
    {
        written = strfromf(buffer, sizeof buffer, format[fmt], 3.1415f);
        printf("strfromf(... %s ...) = %2i, buffer: \"%s\"\n",
               format[fmt], written, buffer);
    }
    puts("");
    for (size_t fmt = 0; fmt != sizeof format / sizeof format[0]; ++fmt)
    {
        written = strfromd(buffer, sizeof buffer, format[fmt], 3.1415);
        printf("strfromd(... %s ...) = %2i, buffer: \"%s\"\n",
               format[fmt], written, buffer);
    }
    puts("");
    for (size_t fmt = 0; fmt != sizeof format / sizeof format[0]; ++fmt)
    {
        written = strfroml(buffer, sizeof buffer, format[fmt], 3.1415);
        printf("strfroml(... %s ...) = %2i, buffer: \"%s\"\n",
               format[fmt], written, buffer);
    }
}

Sortie :

strfromf(... %a ...) = 13, buffer: "0x1.921cacp+1"
strfromf(... %A ...) = 13, buffer: "0X1.921CACP+1"
strfromf(... %e ...) = 12, buffer: "3.141500e+00"
strfromf(... %E ...) = 12, buffer: "3.141500E+00"
strfromf(... %f ...) =  8, buffer: "3.141500"
strfromf(... %F ...) =  8, buffer: "3.141500"
strfromf(... %g ...) =  6, buffer: "3.1415"
strfromf(... %G ...) =  6, buffer: "3.1415"
strfromd(... %a ...) = 20, buffer: "0x1.921cac083126fp+1"
strfromd(... %A ...) = 20, buffer: "0X1.921CAC083126FP+1"
strfromd(... %e ...) = 12, buffer: "3.141500e+00"
strfromd(... %E ...) = 12, buffer: "3.141500E+00"
strfromd(... %f ...) =  8, buffer: "3.141500"
strfromd(... %F ...) =  8, buffer: "3.141500"
strfromd(... %g ...) =  6, buffer: "3.1415"
strfromd(... %G ...) =  6, buffer: "3.1415"
strfroml(... %a ...) = 20, buffer: "0xc.90e5604189378p-2"
strfroml(... %A ...) = 20, buffer: "0XC.90E5604189378P-2"
strfroml(... %e ...) = 12, buffer: "3.141500e+00"
strfroml(... %E ...) = 12, buffer: "3.141500E+00"
strfroml(... %f ...) =  8, buffer: "3.141500"
strfroml(... %F ...) =  8, buffer: "3.141500"
strfroml(... %g ...) =  6, buffer: "3.1415"
strfroml(... %G ...) =  6, buffer: "3.1415"

Référence

  • Norme C23 (ISO/IEC 9899:2024):
  • 7.24.1.3 Les fonctions strfromd, strfromf et strfroml

Voir aussi

imprime une sortie formatée vers stdout , un flux de fichier ou un tampon
(fonction)
convertit une chaîne d'octets en une valeur à virgule flottante
(fonction)