snprintf(3) Library Functions Manual snprintf(3) BEZEICHNUNG snprintf, vsnprintf - Formatierte Zeichenkettenausgabe BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int snprintf(size_t Grosse; char zk[restrict Grosse], size_t Grosse, const char *restrict Format, ); int vsnprintf(size_t Grosse; char zk[restrict Grosse], size_t Grosse, const char *restrict Format, va_list ap); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): snprintf(), vsnprintf(): _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE || /* Glibc <= 2.19: */ _BSD_SOURCE BESCHREIBUNG Diese Funktionen sind printf(3) ahnlich, ausser dass sie in die Zeichenkette zk anstatt in einen Datenstrom schreiben. Die Funktionen snprintf() und vsnprintf() schreiben hochstens Grosse byte (einschliesslich des abschliessenden Nullbytes (>>\0<<)) nach zk. vsnprintf() ist zu snprintf() aquivalent, ausser dass es mit einer va_list statt einer variablen Zahl von Argumenten aufgerufen wird. Diese Funktion ruft das Makro va_end nicht auf. Da es das Makro va_arg aufruft, ist der Wert von ap nach dem Aufruf nicht definiert. Siehe stdarg(3). C99 und POSIX.1-2001 legen fest, dass das Ergebnis nicht definiert ist, wenn ein Aufruf von snprintf() oder vsnprintf() zu einem Kopieren zwischen uberlappenden Objekten fuhren wurde (z.B. wenn das Zielzeichenkettenfeld und eines der ubergebenen Eingabe-Argumente sich auf den gleichen Puffer beziehen). Siehe WARNUNGEN. Format der Formatzeichenkette Siehe printf(3). RUCKGABEWERT Nach erfolgreicher Ausfuhrung geben diese Funktionen die Anzahl der ausgegebenen Bytes zuruck (ohne das fur den Abschluss der Zeichenkettenausgabe verwendete Nullbyte). Die Funktionen snprintf() und vsnprintf() schreiben nicht mehr als Grosse byte (einschliesslich des abschliessenden Nullbytes >>\0<<)). Falls die Ausgabe wegen dieser Begrenzung gekurzt wurde, ist der Ruckgabewert die Anzahl der Zeichen (ohne abschliessendes Nullbyte), die bei ausreichendem Speicherplatz in die Ausgabe geschrieben worden waren. Damit bedeutet ein Ruckgabewert von Grosse oder mehr, dass die Ausgabe gekurzt wurde. (Siehe auch im Folgenden unter WARNUNGEN.) Bei einem Fehler wird ein negativer Wert zuruckgegeben und errno wird gesetzt, um den Fehler anzuzeigen. FEHLER Siehe printf(3). ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +-------------------------+-------------------------+------------------+ |Schnittstelle | Attribut | Wert | +-------------------------+-------------------------+------------------+ |snprintf(), vsnprintf() | Multithread-Fahigkeit | MT-Sicher locale | +-------------------------+-------------------------+------------------+ STANDARDS C11, POSIX.1-2008. GESCHICHTE SUSv2, C99, POSIX.1-2001. Concerning the return value, SUSv2 and C99 contradict each other: when snprintf() is called with size=0 then SUSv2 stipulates an unspecified return value less than 1, while C99 allows str 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 snprintf() with C99. WARNUNGEN Einige Programme verlassen sich leichtsinnig auf Code wie den folgenden snprintf(buf, countof(buf), "%s some further text", buf); to append text to buf. However, the standards explicitly note that the results are undefined if source and destination buffers overlap when calling snprintf() and vsnprintf(). Depending on the version of gcc(1) used, and the compiler options employed, calls such as the above will not produce the expected results. Seit der Glibc-Version 2.1 ist die Implementierung der Funktionen snprintf() und vsnprintf() konform zu C99, verhalt sich also wie oben beschrieben. Bis Glibc 2.0.6 gaben sie im Fall gekurzter Ausgaben -1 zuruck. FEHLER Siehe printf(3). BEISPIELE Um eine genugend grosse Zeichenkette bereitzustellen und in sie zu schreiben (der Code ist korrekt sowohl fur Glibc 2.0 als auch Glibc 2.1): #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 '\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; } Bei Kurzungen in Glibc-Versionen vor 2.0.6 wird dies als ein Fehler aufgefasst und nicht wohlwollend behandelt. SIEHE AUCH printf(1), asprintf(3), printf(3), puts(3), scanf(3), setlocale(3), strfromd(3), wcrtomb(3), wprintf(3), locale(5) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.18 7. Dezember 2025 snprintf(3)