Namespaces
Variants

strfromf, strfromd, strfroml

From cppreference.net
< c ‎ | string ‎ | byte
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

imprime salida formateada hacia stdout , un flujo de archivo o un búfer
(función)
convierte una cadena de bytes a un valor de punto flotante
(función)