1*f68d7bfcSFaraz Vahedi.\" 2*f68d7bfcSFaraz Vahedi.\" Copyright (c) 2026 Faraz Vahedi <kfv@kfv.io> 3*f68d7bfcSFaraz Vahedi.\" 4*f68d7bfcSFaraz Vahedi.\" SPDX-License-Identifier: BSD-2-Clause 5*f68d7bfcSFaraz Vahedi.\" 6*f68d7bfcSFaraz Vahedi.Dd June 27, 2026 7*f68d7bfcSFaraz Vahedi.Dt STRFROMD 3 8*f68d7bfcSFaraz Vahedi.Os 9*f68d7bfcSFaraz Vahedi.Sh NAME 10*f68d7bfcSFaraz Vahedi.Nm strfromd , 11*f68d7bfcSFaraz Vahedi.Nm strfromf , 12*f68d7bfcSFaraz Vahedi.Nm strfroml 13*f68d7bfcSFaraz Vahedi.Nd convert floating point value to 14*f68d7bfcSFaraz Vahedi.Tn ASCII 15*f68d7bfcSFaraz Vahedistring 16*f68d7bfcSFaraz Vahedi.Sh LIBRARY 17*f68d7bfcSFaraz Vahedi.Lb libc 18*f68d7bfcSFaraz Vahedi.Sh SYNOPSIS 19*f68d7bfcSFaraz Vahedi.In stdlib.h 20*f68d7bfcSFaraz Vahedi.Ft int 21*f68d7bfcSFaraz Vahedi.Fn strfromd "char * restrict str" "size_t size" "const char * restrict format" "double fp" 22*f68d7bfcSFaraz Vahedi.Ft int 23*f68d7bfcSFaraz Vahedi.Fn strfromf "char * restrict str" "size_t size" "const char * restrict format" "float fp" 24*f68d7bfcSFaraz Vahedi.Ft int 25*f68d7bfcSFaraz Vahedi.Fn strfroml "char * restrict str" "size_t size" "const char * restrict format" "long double fp" 26*f68d7bfcSFaraz Vahedi.Sh DESCRIPTION 27*f68d7bfcSFaraz VahediFunctions 28*f68d7bfcSFaraz Vahedi.Fn strfromd , 29*f68d7bfcSFaraz Vahedi.Fn strfromf , 30*f68d7bfcSFaraz Vahediand 31*f68d7bfcSFaraz Vahedi.Fn strfroml 32*f68d7bfcSFaraz Vahediconvert the floating-point value 33*f68d7bfcSFaraz Vahedi.Fa fp 34*f68d7bfcSFaraz Vahedito a null terminated string, storing at most 35*f68d7bfcSFaraz Vahedi.Fa size 36*f68d7bfcSFaraz Vahedibytes 37*f68d7bfcSFaraz Vahedi.Pq including the terminating null character 38*f68d7bfcSFaraz Vahediinto the array pointed to by 39*f68d7bfcSFaraz Vahedi.Fa str . 40*f68d7bfcSFaraz Vahedi.Pp 41*f68d7bfcSFaraz VahediThese functions are equivalent to 42*f68d7bfcSFaraz Vahedi.Fn snprintf "s" "n" "format" "fp" , 43*f68d7bfcSFaraz Vahediexcept that default argument promotions are not applied to 44*f68d7bfcSFaraz Vahedi.Fa fp , 45*f68d7bfcSFaraz Vahediand the 46*f68d7bfcSFaraz Vahedi.Fa format 47*f68d7bfcSFaraz Vahedistring is restricted. 48*f68d7bfcSFaraz VahediIt shall consist of exactly the character 49*f68d7bfcSFaraz Vahedi.Ql % , 50*f68d7bfcSFaraz Vahedifollowed by an optional precision that does not contain an asterisk 51*f68d7bfcSFaraz Vahedi.Ql * , 52*f68d7bfcSFaraz Vahedifollowed by one of the conversion specifiers 53*f68d7bfcSFaraz Vahedi.Cm a , A , e , E , f , F , g , 54*f68d7bfcSFaraz Vahedior 55*f68d7bfcSFaraz Vahedi.Cm G . 56*f68d7bfcSFaraz VahediThe conversion specifier applies to the type indicated by the 57*f68d7bfcSFaraz Vahedifunction suffix, rather than by a length modifier. 58*f68d7bfcSFaraz Vahedi.Pp 59*f68d7bfcSFaraz VahediUse of any other format string results in undefined behaviour, 60*f68d7bfcSFaraz Vahedias does any undefined behaviour inherited from 61*f68d7bfcSFaraz Vahedi.Xr snprintf 3 62*f68d7bfcSFaraz Vahediper se. 63*f68d7bfcSFaraz VahediIn case of a format string not specified by the standard, the string 64*f68d7bfcSFaraz Vahedi.Ql EDOOFUS 65*f68d7bfcSFaraz Vahediis written to 66*f68d7bfcSFaraz Vahedi.Fa str , 67*f68d7bfcSFaraz Vahedisubject to the same truncation rules as a successful conversion, and 68*f68d7bfcSFaraz Vahedi.Va errno 69*f68d7bfcSFaraz Vahediis set to 70*f68d7bfcSFaraz Vahedi.Er EDOOFUS . 71*f68d7bfcSFaraz Vahedi.Sh RETURN VALUES 72*f68d7bfcSFaraz VahediThe 73*f68d7bfcSFaraz Vahedi.Fn strfromd , 74*f68d7bfcSFaraz Vahedi.Fn strfromf , 75*f68d7bfcSFaraz Vahediand 76*f68d7bfcSFaraz Vahedi.Fn strfroml 77*f68d7bfcSFaraz Vahedifunctions, as per 78*f68d7bfcSFaraz Vahedi.Xr snprintf 3 , 79*f68d7bfcSFaraz Vahedireturn the number of characters 80*f68d7bfcSFaraz Vahedi.Po 81*f68d7bfcSFaraz Vahedinot counting the terminating null character 82*f68d7bfcSFaraz Vahedi.Pc 83*f68d7bfcSFaraz Vahedithat would have been written 84*f68d7bfcSFaraz Vahedihad 85*f68d7bfcSFaraz Vahedi.Fa n 86*f68d7bfcSFaraz Vahedibeen sufficiently large. 87*f68d7bfcSFaraz VahediThus, the null terminated output has been completely written if 88*f68d7bfcSFaraz Vahediand only if the returned value is both nonnegative and less than 89*f68d7bfcSFaraz Vahedi.Fa size . 90*f68d7bfcSFaraz Vahedi.Sh ERRORS 91*f68d7bfcSFaraz Vahedi.Bl -tag -width Er 92*f68d7bfcSFaraz Vahedi.It Bq Er EDOOFUS 93*f68d7bfcSFaraz VahediThe 94*f68d7bfcSFaraz Vahedi.Fa format 95*f68d7bfcSFaraz Vahedistring is not of the form the standard specifies. 96*f68d7bfcSFaraz Vahedi.El 97*f68d7bfcSFaraz Vahedi.Sh SEE ALSO 98*f68d7bfcSFaraz Vahedi.Xr snprintf 3 , 99*f68d7bfcSFaraz Vahedi.Xr strtod 3 , 100*f68d7bfcSFaraz Vahedi.Xr strtol 3 , 101*f68d7bfcSFaraz Vahedi.Xr strtoul 3 102*f68d7bfcSFaraz Vahedi.Sh STANDARDS 103*f68d7bfcSFaraz VahediFunctions 104*f68d7bfcSFaraz Vahedi.Fn strfromd , 105*f68d7bfcSFaraz Vahedi.Fn strfromf , 106*f68d7bfcSFaraz Vahediand 107*f68d7bfcSFaraz Vahedi.Fn strfroml 108*f68d7bfcSFaraz Vahediconform to 109*f68d7bfcSFaraz Vahedi.St -isoC-2023 . 110