Provided by: manpages-de-dev_4.15.0-9_all bug

BEZEICHNUNG

       strcat, strncat - hängt zwei Zeichenketten aneinander

ÜBERSICHT

       #include <string.h>

       char *strcat(char *restrict Ziel, const char *restrict Quelle);
       char *strncat(char *restrict Ziel, const char *restrict Quelle, size_t n);

BESCHREIBUNG

       Die  Funktion  strcat()  hängt  die  Zeichenkette  Quelle  an  die  Zeichenkette  Ziel an,
       überschreibt dabei das NULL-Byte (»\0«) am Ende von Ziel und fügt ein neues abschließendes
       NULL-Byte  an.  Die Zeichenketten dürfen nicht überlappen und Ziel muss genügend Platz für
       das  Ergebnis  haben.  Falls  Ziel  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 Quelle; und

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

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

       Wenn Quelle n oder mehr Bytes enthält, schreibt strncat()  n+1  Bytes  nach  Ziel  (n  von
       Quelle  sowie  das  abschließende  NULL-Byte).  Daher  muss  die Größe von Ziel wenigstens
       strlen(Ziel)+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 Ziel 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 Quelle an die Zeichenkette Ziel an,
       kopiert dabei höchstens Größe-strlen(Ziel)-1 Zeichen von Quelle und fügt dem Ergebnis  ein
       NULL-Byte  an,  wenn  nicht  Größe kleiner als strlen(Ziel) ist. Diese Funktion behebt das
       Pufferüberlauf-Problem  von  strcat(),  aber  der  Aufrufende  muss  sich  noch  mit   der
       Möglichkeit  eines  Datenverlusts befassen, wenn Größe 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 Größe 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.

BEISPIELE

       strcat() und strncat() müssen das NULL-Byte finden, das die Zeichenkette Ziel  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  Ziel.  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 <stdint.h>
       #include <string.h>
       #include <time.h>
       #include <stdio.h>

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

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

           for (int j = 0; j < LIM; j++) {
               if ((j % 10000) == 0)
                   printf("%d %jd\n", j, (intmax_t) (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.13  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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.