.\" -*- coding: UTF-8 -*- .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" 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 "17. Juli 2016" GNU Linux\-Programmierhandbuch .SH BEZEICHNUNG strcat, strncat \- hängt zwei Zeichenketten aneinander .SH ÜBERSICHT .nf \fB#include \fP .sp \fBchar *strcat(char *\fP\fIdest\fP\fB, const char *\fP\fIsrc\fP\fB);\fP .sp \fBchar *strncat(char *\fP\fIdest\fP\fB, const char *\fP\fIsrc\fP\fB, size_t \fP\fIn\fP\fB);\fP .fi .SH BESCHREIBUNG Die Funktion \fBstrcat\fP() hängt die Zeichenkette \fIsrc\fP an die Zeichenkette \fIdest\fP an, überschreibt dabei das Null\-Byte (\(aq\e0\(aq) am Ende von \fIdest\fP und fügt ein neues abschließendes Null\-Byte an. Die Zeichenketten dürfen nicht überlappen und \fIdest\fP muss genügend Platz für das Ergebnis haben. Falls \fIdest\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 \fIsrc\fP; und .IP * \fIsrc\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 mit einem Null\-Byte. .PP Wenn \fIsrc\fP \fIn\fP oder mehr Bytes enthält, schreibt \fBstrncat\fP() \fIn+1\fP Bytes nach \fIdest\fP (\fIn\fP von \fIsrc\fP sowie das abschließende Null\-Byte). Daher muss die Größe von \fIdest\fP wenigstens \fIstrlen(dest)+n+1\fP Zeichen sein. Eine einfache Implementierung von \fBstrncat\fP() könnte so aussehen: .in +4n .nf 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; } .fi .in .SH RÜCKGABEWERT Die Funktionen \fBstrcat\fP() und \fBstrncat\fP() geben einen Zeiger auf die resultierende Zeichenkette \fIdest\fP zurück. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lbw19 lb lb l l l. Schnittstelle Attribut Wert T{ \fBstrcat\fP(), \fBstrncat\fP() T} Multithread\-Fähigkeit MT\-Safe .TE .SH "KONFORM ZU" 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: size_t strlcat(char *dest, const char *src, size_t size); .\" https://lwn.net/Articles/506530/ .\" Diese Funktion fügt die null\-terminierte Zeichenkette \fIsrc\fP an die Zeichenkette \fIdest\fP an, kopiert dabei höchstens \fIsize\-strlen(dest)\-1\fP Zeichen von \fIsrc\fP und fügt dem Ergebnis ein Null\-Byte an, \fIwenn nicht\fP \fIsize\fP kleiner als \fIstrlen(dest)\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 \fIsize\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 \fIsize\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 BEISPIEL .\" \fBstrcat\fP() und \fBstrncat\fP() müssen das Null\-Byte finden, das die Zeichenkette \fIdest\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 \fIdest\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 \& .nf #include #include #include int main(int argc, char *argv[]) { #define LIM 4000000 int j; char p[LIM]; time_t base; base = time(NULL); p[0] = \(aq\e0\(aq; for (j = 0; j < LIM; j++) { if ((j % 10000) == 0) printf("%d %ld\en", j, (long) (time(NULL) \- base)); strcat(p, "a"); } } .fi .\" \fR\fR .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) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.09 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Schmitt , Martin Eberhard Schauer und Mario Blättermann erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an .