strcpy

STRCPY(3)                   Linux-Programmierhandbuch                  STRCPY(3)



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.

       ┌────────────────────┬───────────────────────┬─────────┐
       │Schnittstelle       Attribut              Wert    │
       ├────────────────────┼───────────────────────┼─────────┤
       │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.08 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>.



GNU                               6. März 2019                         STRCPY(3)