strfromf, strfromd, strfroml
|
定义于头文件
<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 函数
参见
|
(C99)
(C11)
(C11)
(C11)
(C11)
|
将格式化输出打印到
标准输出
、文件流或缓冲区
(函数) |
|
(C99)
(C99)
|
将字节字符串转换为浮点数值
(函数) |