.\" -*- coding: UTF-8 -*- .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" Modified Sat Jul 24 18:11:47 1993 by Rik Faith (faith@cs.unc.edu) .\" 2007-06-15, Marc Boyer + mtk .\" Improve discussion of strncat(). .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH STRCAT 3 "9. Oktober 2022" "Linux\-Handbuchseiten 6.01" .SH BEZEICHNUNG strcat, strncat \- hängt zwei Zeichenketten aneinander .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .PP \fBchar *strcat(char *restrict \fP\fIZiel\fP\fB, const char *restrict \fP\fIQuelle\fP\fB);\fP \fBchar *strncat(char *restrict \fP\fIZiel\fP\fB, const char *restrict \fP\fIQuelle\fP\fB, size_t \fP\fIn\fP\fB);\fP .fi .SH BESCHREIBUNG Die Funktion \fBstrcat\fP() hängt die Zeichenkette \fIQuelle\fP an die Zeichenkette \fIZiel\fP an, überschreibt dabei das NULL\-Byte (»\e0«) am Ende von \fIZiel\fP und fügt ein neues abschließendes NULL\-Byte an. Die Zeichenketten dürfen nicht überlappen und \fIZiel\fP muss genügend Platz für das Ergebnis haben. Falls \fIZiel\fP nicht groß genug ist, ist das Programmverhalten unvorhersehbar; \fIPufferüberläufe sind ein beliebter Angriffspfad für sichere Programme\fP. .PP Die Funktion \fBstrncat\fP() ist ähnlich, aber sie .IP * 3 bearbeitet höchstens \fIn\fP Bytes von \fIQuelle\fP; und .IP * \fIQuelle\fP muss nicht mit einem NULL\-Byte abgeschlossen sein, falls es \fIn\fP oder mehr Bytes enthält. .PP Wie auch bei \fBstrcat\fP() endet die resultierende Zeichenkette in \fIZiel\fP mit einem Null\-Byte. .PP Wenn \fIQuelle\fP \fIn\fP oder mehr Bytes enthält, schreibt \fBstrncat\fP() \fIn+1\fP Bytes nach \fIZiel\fP (\fIn\fP von \fIQuelle\fP sowie das abschließende NULL\-Byte). Daher muss die Größe von \fIZiel\fP wenigstens \fIstrlen(Ziel)+n+1\fP Zeichen sein. .PP Eine einfache Implementierung von \fBstrncat\fP() könnte so aussehen: .PP .in +4n .EX char * strncat(char *Ziel, const char *Quelle, size_t n) { size_t Ziel_len = strlen(Ziel); size_t i; for (i = 0 ; i < n && Quelle[i] != \(aq\e0\(aq ; i++) Ziel[Ziel_len + i] = Quelle[i]; Ziel[Ziel_len + i] = \(aq\e0\(aq; return Ziel; } .EE .in .SH RÜCKGABEWERT Die Funktionen \fBstrcat\fP() und \fBstrncat\fP() geben einen Zeiger auf die resultierende Zeichenkette \fIZiel\fP zurück. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .ad l .nh .TS allbox; lbx lb lb l l l. Schnittstelle Attribut Wert T{ \fBstrcat\fP(), \fBstrncat\fP() T} Multithread\-Fähigkeit MT\-Safe .TE .hy .ad .sp 1 .SH STANDARDS POSIX.1\-2001, POSIX.1\-2008, C89, C99, SVr4, 4.3BSD. .SH ANMERKUNGEN Einige Systeme (die BSDs, Solaris und andere) stellen die folgende Funktion bereit: .PP .in +4n .EX size_t strlcat(char *dest, const char *src, size_t size); .EE .in .PP .\" https://lwn.net/Articles/506530/ .\" Diese Funktion fügt die null\-terminierte Zeichenkette \fIQuelle\fP an die Zeichenkette \fIZiel\fP an, kopiert dabei höchstens \fIGröße\-strlen(Ziel)\-1\fP Zeichen von \fIQuelle\fP und fügt dem Ergebnis ein NULL\-Byte an, \fIwenn nicht\fP \fIGröße\fP kleiner als \fIstrlen(Ziel)\fP ist. Diese Funktion behebt das Pufferüberlauf\-Problem von \fBstrcat\fP(), aber der Aufrufende muss sich noch mit der Möglichkeit eines Datenverlusts befassen, wenn \fIGröße\fP zu klein ist. Die Funktion gibt die Länge der Zeichenkette zurück, die \fBstrlcat\fP() zu erzeugen versuchte; wenn der Rückgabewert größer als oder gleich \fIGröße\fP ist, kam es zu Datenverlust. Wenn Datenverlust von Bedeutung ist, \fImuss\fP der Aufrufende entweder vor dem Aufruf die Argumente oder nach dem Aufruf den Rückgabewert prüfen. \fBstrlcat\fP() ist nicht in Glibc vorhanden und nicht von POSIX standardisiert, sondern ist unter Linux über die Bibliothek \fIlibbsd\fP verfügbar. .SH BEISPIELE .\" \fBstrcat\fP() und \fBstrncat\fP() müssen das NULL\-Byte finden, das die Zeichenkette \fIZiel\fP abschließt. Hierfür wird eine Suche benutzt, die am Anfang der Zeichenkette beginnt. Aus diesem Grund skaliert die Ausführungszeit dieser Funktionen mit der Länge der Zeichenkette \fIZiel\fP. Dies kann durch die Ausführung des unten stehenden Programms gezeigt werden. (Wenn viele Zeichenketten zu einer Zeichenkette zusammengefasst werden sollen, dann ist die Ausführung schneller, wenn die Bytes von jeder Quell\-Zeichenkette »manuell« in die Ziel\-Zeichenkette kopiert werden, während ein Zeiger auf das jeweils aktuelle Ende der Ziel\-Zeichenkette zeigt.) .SS Programmquelltext .\" SRC BEGIN (strcat.c) \& .EX #include #include #include #include int main(void) { #define LIM 4000000 char p[LIM + 1]; /* +1 für abschließendes NULL\-Byte */ time_t base; base = time(NULL); p[0] = \(aq\e0\(aq; for (unsigned int j = 0; j < LIM; j++) { if ((j % 10000) == 0) printf("%u %jd\en", j, (intmax_t) (time(NULL) \- base)); strcat(p, "a"); } } .EE .\" SRC END .SH "SIEHE AUCH" \fBbcopy\fP(3), \fBmemccpy\fP(3), \fBmemcpy\fP(3), \fBstrcpy\fP(3), \fBstring\fP(3), \fBstrncpy\fP(3), \fBwcscat\fP(3), \fBwcsncat\fP(3) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Schmitt , Martin Eberhard Schauer und Mario Blättermann 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 .