Namespaces
Variants

strfromf, strfromd, strfroml

From cppreference.net
< c ‎ | string ‎ | byte
定义于头文件 <stdlib.h>
int strfromf ( char * restrict s, size_t n, const char * restrict format, float fp ) ;
(C23 起)
int strfromd ( char * restrict s, size_t n, const char * restrict format, double fp ) ;
(C23 起)
int strfroml ( char * restrict s, size_t n, const char * restrict format, long double fp ) ;
(C23 起)

将浮点数值转换为字节字符串。

这些函数等效于 snprintf ( s, n, format, fp ) ,不同之处在于格式字符串只能包含字符 % 、不包含星号 * 的可选精度说明符,以及适用于 double float long double 类型的转换说明符( a A e E f F g G 之一),具体类型由函数后缀指明(而非通过长度修饰符)。使用这些函数时若采用其他格式字符串将导致未定义行为。

目录

参数

s - 指向要写入的字符串的指针
n - 最多可写入 n - 1 个字符,外加空终止符
format - 指向空终止字节字符串的指针,指定如何解释数据
fp - 要转换的浮点数值

返回值

n 足够大时本应写入的字符数(不计算终止空字符)。因此,当且仅当返回值非负且小于 n 时,说明空终止输出已完全写入。

示例

#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);
    }
}

输出:

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"

参考

  • C23 标准 (ISO/IEC 9899:2024):
  • 7.24.1.3 strfromd、strfromf 和 strfroml 函数

参见

将格式化输出打印到 标准输出 、文件流或缓冲区
(函数)
将字节字符串转换为浮点数值
(函数)