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
)
と等価ですが、書式文字列には
%
文字、アスタリスク
*
を含まない任意指定の精度、および変換指定子
a
、
A
、
e
、
E
、
f
、
F
、
g
、
G
のいずれかのみを含むことができます。これらは関数の接尾辞によって示される型(長さ修飾子ではなく)
double
、
float
、または
long
double
)に適用されます。これらの関数を他の書式文字列で使用すると、未定義の動作を引き起こします。
目次 |
パラメータ
| s | - | 書き込み先の文字列へのポインタ |
| n | - | 最大 n - 1 文字まで書き込み可能(ナルターミネータ含む) |
| format | - | データの解釈方法を指定するナル終端バイト文字列へのポインタ |
| fp | - | 変換する浮動小数点値 |
戻り値
n が十分に大きかった場合に書き込まれたであろう文字数。終端のnull文字は含まない。したがって、返される値が非負かつ n 未満である場合にのみ、null終端された出力は完全に書き込まれたことになる。
例
#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)
|
書式付き出力を
stdout
、ファイルストリーム、またはバッファに出力する
(関数) |
|
(C99)
(C99)
|
バイト文字列を浮動小数点値に変換する
(関数) |