focal (3) strcpy.3.gz

Provided by: manpages-de-dev_2.16-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:

           if (buflen > 0) {
               strncpy(buf, str, buflen - 1);
               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  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>,  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>.