.\" -*- coding: UTF-8 -*- '\" t .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH snprintf 3 "7. Dezember 2025" "Linux man\-pages 6.18" .SH BEZEICHNUNG snprintf, vsnprintf \- Formatierte Zeichenkettenausgabe .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP,\ \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .P \fBint snprintf(\fPsize_t Größe; \fB char \fP\fIzk\fP\fB[restrict \fP\fIGröße\fP\fB], size_t \fP\fIGröße\fP\fB,\fP \fB const char *restrict \fP\fIFormat\fP\fB, …);\fP \fBint vsnprintf(\fPsize_t Größe; \fB char \fP\fIzk\fP\fB[restrict \fP\fIGröße\fP\fB], size_t \fP\fIGröße\fP\fB,\fP \fB const char *restrict \fP\fIFormat\fP\fB, va_list \fP\fIap\fP\fB);\fP .fi .P .RS -4 Mit Glibc erforderliche Feature\-Test\-Makros (siehe \fBfeature_test_macros\fP(7)): .RE .P \fBsnprintf\fP(), \fBvsnprintf\fP(): .nf _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE || /* Glibc <= 2.19: */ _BSD_SOURCE .fi .SH BESCHREIBUNG Diese Funktionen sind \fBprintf\fP(3) ähnlich, außer dass sie in die Zeichenkette \fIzk\fP anstatt in einen Datenstrom schreiben. .P Die Funktionen \fBsnprintf\fP() und \fBvsnprintf\fP() schreiben höchstens \fIGröße\fP byte (einschließlich des abschließenden Nullbytes (»\[rs]0«)) nach \fIzk\fP. .P \fBvsnprintf\fP() ist zu \fBsnprintf\fP() äquivalent, außer dass es mit einer \fIva_list\fP statt einer variablen Zahl von Argumenten aufgerufen wird. Diese Funktion ruft das Makro \fIva_end\fP nicht auf. Da es das Makro \fIva_arg\fP aufruft, ist der Wert von \fIap\fP nach dem Aufruf nicht definiert. Siehe \fBstdarg\fP(3). .P C99 und POSIX.1\-2001 legen fest, dass das Ergebnis nicht definiert ist, wenn ein Aufruf von \fBsnprintf\fP() oder \fBvsnprintf\fP() zu einem Kopieren zwischen überlappenden Objekten führen würde (z.B. wenn das Zielzeichenkettenfeld und eines der übergebenen Eingabe\-Argumente sich auf den gleichen Puffer beziehen). Siehe WARNUNGEN. .SS "Format der Formatzeichenkette" Siehe \fBprintf\fP(3). .SH RÜCKGABEWERT Nach erfolgreicher Ausführung geben diese Funktionen die Anzahl der ausgegebenen Bytes zurück (ohne das für den Abschluß der Zeichenkettenausgabe verwendete Nullbyte). .P Die Funktionen \fBsnprintf\fP() und \fBvsnprintf\fP() schreiben nicht mehr als \fIGröße\fP byte (einschließlich des abschließenden Nullbytes »\[rs]0«)). Falls die Ausgabe wegen dieser Begrenzung gekürzt wurde, ist der Rückgabewert die Anzahl der Zeichen (ohne abschließendes Nullbyte), die bei ausreichendem Speicherplatz in die Ausgabe geschrieben worden wären. Damit bedeutet ein Rückgabewert von \fIGröße\fP oder mehr, dass die Ausgabe gekürzt wurde. (Siehe auch im Folgenden unter WARNUNGEN.) .P Bei einem Fehler wird ein negativer Wert zurückgegeben und \fIerrno\fP wird gesetzt, um den Fehler anzuzeigen. .SH FEHLER Siehe \fBprintf\fP(3). .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lbx lb lb l l l. Schnittstelle Attribut Wert T{ .na .nh \fBsnprintf\fP(), \fBvsnprintf\fP() T} Multithread\-Fähigkeit MT\-Sicher locale .TE .SH STANDARDS C11, POSIX.1\-2008. .SH GESCHICHTE SUSv2, C99, POSIX.1\-2001. .IP Concerning the return value, SUSv2 and C99 contradict each other: when \fBsnprintf\fP() is called with \fIsize\fP=0 then SUSv2 stipulates an unspecified return value less than 1, while C99 allows \fIstr\fP to be NULL in this case, and gives the return value (as always) as the number of characters that would have been written in case the output string has been large enough. POSIX.1\-2001 and later align their specification of \fBsnprintf\fP() with C99. .SH WARNUNGEN Einige Programme verlassen sich leichtsinnig auf Code wie den folgenden .P .in +4n .EX snprintf(buf, countof(buf), "%s some further text", buf); .EE .in .P .\" http://sourceware.org/bugzilla/show_bug.cgi?id=7075 to append text to \fIbuf\fP. However, the standards explicitly note that the results are undefined if source and destination buffers overlap when calling \fBsnprintf\fP() and \fBvsnprintf\fP(). Depending on the version of \fBgcc\fP(1) used, and the compiler options employed, calls such as the above will \fBnot\fP produce the expected results. .P .\" .SH HISTORY .\" UNIX V7 defines the three routines .\" .BR sprintf (). .\" 2.11BSD has .\" .BR vsprintf (). .\" 4.4BSD introduces the functions .\" .BR snprintf () .\" and .\" .BR vsnprintf (). .\" FreeBSD also has functions .\" .BR asprintf () .\" and .\" .BR vasprintf (), .\" that allocate a buffer large enough for .\" .BR sprintf (). Seit der Glibc\-Version 2.1 ist die Implementierung der Funktionen \fBsnprintf\fP() und \fBvsnprintf\fP() konform zu C99, verhält sich also wie oben beschrieben. Bis Glibc 2.0.6 gaben sie im Fall gekürzter Ausgaben \-1 zurück. .SH FEHLER Siehe \fBprintf\fP(3). .SH BEISPIELE Um eine genügend große Zeichenkette bereitzustellen und in sie zu schreiben (der Code ist korrekt sowohl für Glibc 2.0 als auch Glibc 2.1): .P .EX #include #include #include \& char * make_message(const char *fmt, ...) { int n = 0; size_t size = 0; char *p = NULL; va_list ap; \& /* Determine required size. */ \& va_start(ap, fmt); n = vsnprintf(p, size, fmt, ap); va_end(ap); \& if (n < 0) return NULL; \& size = (size_t) n + 1; /* One extra byte for \[aq]\[rs]0\[aq] */ p = malloc(size); if (p == NULL) return NULL; \& va_start(ap, fmt); n = vsnprintf(p, size, fmt, ap); va_end(ap); \& if (n < 0) { free(p); return NULL; } \& return p; } .EE .P Bei Kürzungen in Glibc\-Versionen vor 2.0.6 wird dies als ein Fehler aufgefasst und nicht wohlwollend behandelt. .SH "SIEHE AUCH" \fBprintf\fP(1), \fBasprintf\fP(3), \fBprintf\fP(3), \fBputs\fP(3), \fBscanf\fP(3), \fBsetlocale\fP(3), \fBstrfromd\fP(3), \fBwcrtomb\fP(3), \fBwprintf\fP(3), \fBlocale\fP(5) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .