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.

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, füllt strncpy() den Rest von Ziel mit Null-Bytes auf.

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.

KONFORM ZU
SVr4, 4.3BSD, C89, C99.

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. Wenn kein abschließendes Null-Byte innerhalb der ersten n Zeichen von Quelle enthalten ist, erstellt strncpy() eine nicht abgeschlossene Zeichenkette in Ziel. Programmierer verhindern diesen Fehler oftmals dadurch, dass sie den Abschluss folgendermaßen erzwingen:
strncpy(buf, str, n);
if (n > 0)
    buf[n - 1]= '\0';

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), string(3), strdup(3), wcscpy(3), wcsncpy(3)

KOLOPHON
Diese Seite ist Teil der Veröffentlichung 3.27 des Projekts Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Schmitt <fw@vieta.math.uni-sb.de> und Tobias Quathamer <toddy@debian.org> 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>.