jammy (3) strcat.3.gz

Provided by: manpages-de-dev_4.13-4_all bug

BEZEICHNUNG

       strcat, strncat - hängt zwei Zeichenketten aneinander

ÜBERSICHT

       #include <string.h>

       char *strcat(char *Ziel, const char *Quelle);

       char *strncat(char *Ziel, const char *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.10  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⟩.