strfromf, strfromd, strfroml
| Definiert im Header <stdlib.h> |
||
| int strfromf( char* restrict s, size_t n, const char* restrict format, float fp ); |
(seit C23) | |
| int strfromd( char* restrict s, size_t n, const char* restrict format, double fp ); |
(seit C23) | |
| int strfroml( char* restrict s, size_t n, const char* restrict format, long double fp ); |
(seit C23) | |
Konvertiert einen Gleitkommawert in einen Byte-String.
Die Funktionen sind äquivalent zu snprintf(s, n, format, fp), mit der Ausnahme, dass der Format-String nur das Zeichen %, eine optionale Präzision, die kein Sternchen * enthält, und einen der Konvertierungsspezifizierer a, A, e, E, f, F, g oder G enthalten darf, der sich auf den Typ double, float oder long double bezieht, der durch den Funktionssuffix (und nicht durch einen Längenmodifikator) angegeben wird. Die Verwendung dieser Funktionen mit einem anderen Format-String führt zu undefiniertem Verhalten.
Inhalt |
[bearbeiten] Parameter
| s | - | Zeiger auf eine Zeichenkette, in die geschrieben werden soll |
| n | - | bis zu n-1 Zeichen können geschrieben werden, plus der Null-Terminator |
| format | - | Zeiger auf einen null-terminierten Byte-String, der angibt, wie die Daten zu interpretieren sind |
| fp | - | Gleitkommawert zur Konvertierung |
[bearbeiten] Rückgabewert
Die Anzahl der Zeichen, die geschrieben worden wären, wenn n ausreichend groß gewesen wäre, ohne das abschließende Nullzeichen zu zählen. Somit ist die null-terminierte Ausgabe genau dann vollständig geschrieben, wenn der zurückgegebene Wert sowohl nicht-negativ als auch kleiner als n ist.
[bearbeiten] Beispiel
#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); } }
Ausgabe
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"
[bearbeiten] Referenz
- C23-Standard (ISO/IEC 9899:2024)
- 7.24.1.3 Die Funktionen strfromd, strfromf und strfroml
[bearbeiten] Siehe auch
| (C99)(C11)(C11)(C11)(C11) |
gibt formatierte Ausgaben nach stdout, an einen Dateistream oder in einen Puffer aus (Funktion) |
| (C99)(C99) |
konvertiert einen Byte-String in einen Gleitkommawert (Funktion) |