名稱空間
變體
操作

strfromf, strfromd, strfroml

來自 cppreference.com
< 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),但格式字串應只包含字元 %、一個可選的不含星號 * 的精度,以及 aAeEfFgG 之一的轉換指定符,該指定符適用於函式字尾所指示的型別(doublefloatlong double),而非由長度修飾符指示。以任何其他格式字串使用這些函式導致未定義行為。

目錄

[編輯] 引數

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

[編輯] 參閱

將格式化輸出列印到 stdout、檔案流或緩衝區
(函式) [編輯]
將位元組字串轉換為浮點值
(函式) [編輯]