strfromf, strfromd, strfroml

来自cppreference.com
< c‎ | string‎ | byte
在标头 <stdlib.h> 定义
int strfromf(char*restrict s, size_t n, constchar*restrict format, float fp );
(C23 起)
int strfromd(char*restrict s, size_t n, constchar*restrict format, double fp );
(C23 起)
int strfroml(char*restrict s, size_t n, constchar*restrict format, longdouble fp );
(C23 起)

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

这些函数等价于 snprintf(s, n, format, fp),但格式字符串应当仅包含字符 %,可选的不包含星号 * 的精度,和以下转换指示符之一:aAeEfFgG,分别使其适用于函数后缀(而非长度修饰符)所指定的类型(doublefloatlongdouble)。以其他任何格式字符串调用这些函数将导致未定义行为。

目录

[编辑]参数

s - 指向将写入的字符串
n - 最多写入 n - 1 个字符和空终结符
format - 指向空终结字节字符串的指针,指定如何判读数据
fp - 欲转换的浮点数

[编辑]返回值

假设 n 足够大时将会写入的字符数量,不计入终结的空字符。因而,当且仅当返回值非负且小于 n 时,才会完整写入带空终结的输出。

[编辑]示例

#include <stdio.h>#include <stdlib.h>   int main(){char buffer[32];int written;constchar* 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 The strfromd, strfromf, and strfroml functions

[编辑]参阅

打印格式化输出到 stdout、文件流或缓冲区
(函数)[编辑]
将字节字符串转换成浮点数
(函数)[编辑]
close