strfromf, strfromd, strfroml
|
Definido en el encabezado
<stdlib.h>
|
||
|
int
strfromf
(
char
*
restrict
s,
size_t
n,
const
char
*
restrict
format,
float
fp
)
;
|
(desde C23) | |
|
int
strfromd
(
char
*
restrict
s,
size_t
n,
const
char
*
restrict
format,
double
fp
)
;
|
(desde C23) | |
|
int
strfroml
(
char
*
restrict
s,
size_t
n,
const
char
*
restrict
format,
long
double
fp
)
;
|
(desde C23) | |
Convierte un valor de punto flotante a una cadena de bytes.
Las funciones son equivalentes a
snprintf
(
s, n, format, fp
)
, excepto que la cadena de formato solo debe contener el carácter
%
, una precisión opcional que no contenga un asterisco
*
, y uno de los especificadores de conversión
a
,
A
,
e
,
E
,
f
,
F
,
g
, o
G
, que se aplica al tipo
double
,
float
, o
long
double
) indicado por el sufijo de la función (en lugar de por un modificador de longitud). El uso de estas funciones con cualquier otra cadena de formato resulta en comportamiento indefinido.
Contenidos |
Parámetros
| s | - | puntero a una cadena de caracteres donde escribir |
| n | - | se pueden escribir hasta n - 1 caracteres, más el terminador nulo |
| format | - | puntero a una cadena de bytes terminada en nulo que especifica cómo interpretar los datos |
| fp | - | valor de punto flotante a convertir |
Valor de retorno
El número de caracteres que se habrían escrito si n hubiera sido suficientemente grande, sin contar el carácter nulo de terminación. Por lo tanto, la salida terminada en nulo se ha escrito completamente si y solo si el valor devuelto es no negativo y menor que n .
Ejemplo
#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); } }
Salida:
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"
Referencia
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.24.1.3 Las funciones strfromd, strfromf y strfroml
Véase también
|
(C99)
(C11)
(C11)
(C11)
(C11)
|
imprime salida formateada hacia
stdout
, un flujo de archivo o un búfer
(función) |
|
(C99)
(C99)
|
convierte una cadena de bytes a un valor de punto flotante
(función) |