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

BEZEICHNUNG

       strcpy, strncpy - kopiert eine Zeichenkette

ÜBERSICHT

       #include <string.h>

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

       char *strncpy(char *Ziel, const char *Quelle, size_t n);

BESCHREIBUNG

       Die Funktion strcpy() kopiert die Zeichenkette, auf die der Zeiger Quelle zeigt, inklusive
       des abschließenden Null-Bytes ('\0') an die Stelle, auf die Ziel zeigt. Die  Zeichenketten
       dürfen  sich  nicht  überlappen und die Zielzeichenkette Ziel muss groß genug sein, um die
       Kopie aufzunehmen. Vorsicht vor Pufferüberläufen! (Siehe FEHLER)

       Die Funktion strncpy() arbeitet ähnlich, allerdings  werden  maximal  n  Byte  von  Quelle
       kopiert.  Warnung:  Ist  kein  Null-Byte  innerhalb der ersten n Byte von Quelle, wird die
       Zeichenkette in Ziel nicht durch ein Null-Byte abgeschlossen.

       Ist die Länge von Quelle kleiner als n, schreibt  strncpy()  zusätzliche  Null-Bytes  nach
       Ziel, um sicherzustellen, dass insgesamt n Byte geschrieben werden.

       Eine einfache Implementierung von strncpy() ist:

           char *
           strncpy(char *Ziel, const char *Quelle, size_t n)
           {
               size_t i;

               for (i = 0; i < n && Quelle[i] != '\0'; i++)
                   Ziel[i] = Quelle[i];
               for ( ; i < n; i++)
                   Ziel[i] = '\0';

               return Ziel;
           }

RÜCKGABEWERT

       Die  Funktionen  strcpy()  und  strncpy() geben einen Zeiger auf die Zielzeichenkette Ziel
       zurück.

ATTRIBUTE

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

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

KONFORM ZU

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

ANMERKUNGEN

       Einige Programmierer  halten  strncpy()  für  ineffizient  und  fehleranfällig.  Wenn  der
       Programmierer  weiß, dass die Größe von Ziel größer ist als die Länge von Quelle (indem er
       Code verwendet, der das überprüft!), kann strcpy() benutzt werden.

       Eine gültige (und beabsichtigte) Anwendung von strncpy() ist es,  eine  C-Zeichenkette  in
       einen  Puffer  fester  Länge zu kopieren und zugleich zweierlei zu garantieren: der Puffer
       läuft nicht über  und  nicht  benutzte  Bytes  im  Zielpuffer  werden  auf  Null  gesetzt.
       (Vielleicht  um  Informationslecks  zu  verhindern, wenn der Puffer auf Medien geschrieben
       oder mittels  einer  IPC-Technik  (Interprozesskommunikation)  zu  einem  anderen  Prozess
       übertragen werden soll.)

       Wenn  kein abschließendes Null-Byte innerhalb der ersten n Bytes von Quelle enthalten ist,
       erstellt strncpy() eine nicht abgeschlossene Zeichenkette in Ziel.  Falls  buf  die  Länge
       buflen hat, können Sie den Abschluss durch etwas wie das Folgende erzwingen:

           strncpy(buf, str, buflen - 1);
           if (buflen > 0)
               buf[buflen - 1]= '\0';

       (Die  obige  Technik  ignoriert  natürlich  die  Tatsache,  dass falls die Quelle mehr als
       buflen - 1 Byte enthält, diese Informationen beim Kopieren nach Ziel verloren gehen.)

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

           size_t strlcpy(char *ziel, const char *quelle, size_t groesse);

       Diese Funktion ähnelt strncpy(), aber sie kopiert höchstens groesse-1 Byte zum ziel,  fügt
       immer  ein  abschließendes  Null-Byte  hinzu  und  füllt  das  Ziel  nicht  mit (weiteren)
       Null-Bytes auf. Diese Funktion behebt einige der Probleme von strcpy() und strncpy(), aber
       der  Aufrufende  muss  sich mit der Möglichkeit von Datenverlust befassen, wenn groesse zu
       klein ist. Der Rückgabewert der Funktion ist die Länge der quelle, mit der die  Verkürzung
       leicht  erkannt werden kann: wenn der Rückgabewert größer als oder gleich der groesse ist,
       wurde verkürzt. Wenn Datenverlust nicht auftreten darf, muss der Aufrufende  entweder  die
       Argumente vor dem Aufruf oder den Rückgabewert der Funktion prüfen. strlcpy() ist nicht in
       der Glibc vorhanden und nicht von POSIX standardisiert, sondern ist unter Linux  über  die
       Bibliothek libbsd verfügbar.

FEHLER

       Wenn  die  Zielzeichenkette  beim  Aufruf  von  strcpy()  nicht groß genug ist, kann alles
       Denkbare passieren. Der Überlauf  von  Zeichenkettenpuffern  mit  fester  Länge  ist  eine
       beliebte Cracker-Technik, um vollständige Kontrolle über einen Rechner zu erlangen. Immer,
       wenn ein Programm Daten aus einem Puffer liest oder in ihn  schreibt,  muss  das  Programm
       zuerst  überprüfen,  ob  es  genug  freien Platz gibt. Das kann überflüssig sein, wenn Sie
       beweisen können, dass ein Überlauf unmöglich ist, aber  seien  Sie  vorsichtig:  Programme
       können im Lauf der Zeit geändert werden. Und plötzlich wird das Unmögliche möglich.

SIEHE AUCH

       bcopy(3),  memccpy(3), memcpy(3), memmove(3), stpcpy(3), stpncpy(3), strdup(3), string(3),
       wcscpy(3), wcsncpy(3)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  4.15  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>,  Dr. Tobias Quathamer <toddy@debian.org>, Helge Kreutzmann <debian@helgefjell.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>.