strfromf, strfromd, strfroml
|
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
|
(C99)
(C11)
(C11)
(C11)
(C11)
|
imprime une sortie formatée vers
stdout
, un flux de fichier ou un tampon
(fonction) |
|
(C99)
(C99)
|
convertit une chaîne d'octets en une valeur à virgule flottante
(fonction) |