.\" -*- 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 Bezüglich des Rückgabewertes widersprechen sich SUSv2 und C99: Wird \fBsnprintf\fP() mit \fIsize\fP=\fB0\fP aufgerufen, dann fordert SUSv2 einen nicht festgelegten Wert kleiner als 1, während C99 erlaubt, dass \fIzk\fP in diesem Fall NULL ist und beschreibt den Rückgabewert (wie üblich) als die Anzahl der Zeichen, die geschrieben worden wären, falls die Ausgabezeichenkette groß genug gewesen wäre. POSIX.1\-2001 und neuere richten ihre Spezifikation von \fBsnprintf\fP() an C99 aus. .SH WARNUNGEN Einige Programme verlassen sich leichtsinnig auf Code wie den folgenden .P .in +4n .EX snprintf(puf, countof(puf), "%s weiterer Text", puf); .EE .in .P .\" http://sourceware.org/bugzilla/show_bug.cgi?id=7075 um Text an \fIpuf\fP anzuhängen. Allerdings vermerken die Standards explizit, dass die Ergebnisse nicht definiert sind, falls sich die Quell\- und Zielpuffer beim Aufruf von \fBsnprintf\fP() und \fBvsnprintf\fP() überlappen. Abhängig von der verwandten Version von \fBgcc\fP(1) und den eingesetzten Compiler\-Optionen werden Aufrufe wie der vorstehende \fBnicht\fP die erwarteten Ergebnisse liefern. .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; \& /* Benötigte Größe bestimomen. */ \& va_start(ap, fmt); n = vsnprintf(p, size, fmt, ap); va_end(ap); \& if (n < 0) return NULL; \& size = (size_t) n + 1; /* Ein zusätzliches Byte für »\[rs]0« */ 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 .