strfromf, strfromd, strfroml
From cppreference.com
| ヘッダー <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以降) | |
浮動小数点値をバイト文字列に変換します。
これらの関数は、フォーマット文字列に文字 '%'、アスタリスク '*' を含まないオプションの精度、および関数の接尾辞(長さ修飾子によるものではなく)によって示される `double`、`float`、または `long double` の型に適用される変換指定子 `a`、`A`、`e`、`E`、`f`、`F`、`g`、または `G` のいずれかのみが含まれる場合を除き、`snprintf(s, n, format, fp)` と同等です。それ以外のフォーマット文字列でのこれらの関数の使用は、未定義の動作を引き起こします。
目次 |
[編集] パラメータ
| 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 The strfromd, strfromf, and strfroml functions
[編集] 関連項目
| (C99)(C11)(C11)(C11)(C11) |
stdout、ファイルストリーム、またはバッファに書式化された出力を書き出す (関数) |
| (C99)(C99) |
バイト文字列を浮動小数点値に変換する (関数) |