strfromf, strfromd, strfroml
Определено в заголовочном файле <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 или longdouble, определяемому суффиксом функции (а не модификатором длины). Использование этих функций с любой другой строкой формата приводит к неопределённому поведению.
Параметры
| 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 Функции strfromd, strfromf и strfroml
См. также
|
(C99)(C11)(C11)(C11)(C11) | выводит форматированные данные в stdout, файловый поток или буфер (функция) |
|
(C99)(C99) | преобразует байтовую строку в значение с плавающей точкой (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/byte/strfromf