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개의 문자와 널 종결자(null terminator)가 기록될 수 있음
format - 데이터 해석 방법을 지정하는 널 종결 바이트 문자열(null-terminated byte string)을 가리키는 포인터
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 함수

참고 항목

표준 출력, 파일 스트림 또는 버퍼에 서식이 지정된 출력을 인쇄합니다
(함수)
바이트 문자열을 부동 소수점 값으로 변환합니다
(함수)