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 ) と等価ですが、書式文字列には % 文字、アスタリスク * を含まない任意指定の精度、および変換指定子 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関数

関連項目

書式付き出力を stdout 、ファイルストリーム、またはバッファに出力する
(関数)
バイト文字列を浮動小数点値に変換する
(関数)