Provided by: manpages-de-dev_2.16-1_all bug

BEZEICHNUNG

       strcat, strncat - hängt zwei Zeichenketten aneinander

ÜBERSICHT

       #include <string.h>

       char *strcat(char *dest, const char *src);

       char *strncat(char *dest, const char *src, size_t n);

BESCHREIBUNG

       Die Funktion strcat() hängt die Zeichenkette src an die Zeichenkette dest an, überschreibt
       dabei das Null-Byte ('\0') am Ende von dest und fügt ein  neues  abschließendes  Null-Byte
       an.  Die  Zeichenketten  dürfen  nicht  überlappen  und  dest  muss genügend Platz für das
       Ergebnis haben. Falls dest nicht groß genug ist, ist das Programmverhalten unvorhersehbar;
       Pufferüberläufe sind ein beliebter Angriffspfad für sichere Programme.

       Die Funktion strncat() ist ähnlich, aber sie

       *  bearbeitet höchstens n Bytes von src; und

       *  src  muss  nicht  mit  einem  Null-Byte  abgeschlossen sein, falls es n oder mehr Bytes
          enthält.

       Wie auch bei strcat() endet die resultierende Zeichenkette mit einem Null-Byte.

       Wenn src n oder mehr Bytes enthält, schreibt strncat() n+1 Bytes  nach  dest  (n  von  src
       sowie   das   abschließende   Null-Byte).   Daher  muss  die  Größe  von  dest  wenigstens
       strlen(dest)+n+1 Zeichen sein.

       Eine einfache Implementierung von strncat() könnte so aussehen:

           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] != '\0' ; i++)
                   Ziel[Ziel_len + i] = Quelle[i];
               Ziel[Ziel_len + i] = '\0';

               return Ziel;
           }

RÜCKGABEWERT

       Die  Funktionen  strcat()  und  strncat()  geben  einen  Zeiger  auf   die   resultierende
       Zeichenkette dest zurück.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌────────────────────┬───────────────────────┬─────────┐
       │SchnittstelleAttributWert    │
       ├────────────────────┼───────────────────────┼─────────┤
       │strcat(), strncat() │ Multithread-Fähigkeit │ MT-Safe │
       └────────────────────┴───────────────────────┴─────────┘

KONFORM ZU

       POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.

ANMERKUNGEN

       Einige Systeme (die BSDs, Solaris und andere) stellen die folgende Funktion bereit:

           size_t strlcat(char *dest, const char *src, size_t size);

       Diese  Funktion  fügt  die  null-terminierte Zeichenkette src an die Zeichenkette dest an,
       kopiert dabei höchstens size-strlen(dest)-1 Zeichen von src  und  fügt  dem  Ergebnis  ein
       Null-Byte  an,  wenn  nicht  size  kleiner als strlen(dest) ist. Diese Funktion behebt das
       Pufferüberlauf-Problem  von  strcat(),  aber  der  Aufrufende  muss  sich  noch  mit   der
       Möglichkeit  eines  Datenverlusts  befassen, wenn size zu klein ist. Die Funktion gibt die
       Länge der Zeichenkette zurück, die strlcat() zu erzeugen versuchte; wenn der  Rückgabewert
       größer  als  oder gleich size ist, kam es zu Datenverlust. Wenn Datenverlust von Bedeutung
       ist, muss der Aufrufende entweder vor dem Aufruf die Argumente oder nach  dem  Aufruf  den
       Rückgabewert  prüfen.  strlcat()  ist  nicht  in  Glibc  vorhanden  und  nicht  von  POSIX
       standardisiert, sondern ist unter Linux über die Bibliothek libbsd verfügbar.

BEISPIEL

       strcat() und strncat() müssen das Null-Byte finden, das die Zeichenkette dest  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  dest.  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.)

   Programmquelltext

       #include <string.h>
       #include <time.h>
       #include <stdio.h>

       int
       main(int argc, char *argv[])
       {
       #define LIM 4000000
           int j;
           char p[LIM + 1];    /* +1 für abschließendes Null-Byte */
           time_t base;

           base = time(NULL);
           p[0] = '\0';

           for (j = 0; j < LIM; j++) {
               if ((j % 10000) == 0)
                   printf("%d %ld\n", j, (long) (time(NULL) - base));
               strcat(p, "a");
           }
       }

SIEHE AUCH

       bcopy(3), memccpy(3), memcpy(3), strcpy(3), string(3), strncpy(3), wcscat(3), wcsncat(3)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  5.03  des  Projekts  Linux-man-pages. 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/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite  wurde  von Markus Schmitt <fw@math.uni-
       sb.de>,  Martin  Eberhard  Schauer   <Martin.E.Schauer@gmx.de>   und   Mario   Blättermann
       <mario.blaettermann@gmail.com> 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 <debian-l10n-german@lists.debian.org>.