table of contents
other sections
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.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.strncpy(buf, str, n); if (n > 0) buf[n - 1]= '\0';
(Die obige Technik ignoriert natürlich die Tatsache, dass die in Quelle enthaltenden Informationen beim Kopieren nach Ziel verloren gehen.)
size_t strlcpy(char *ziel, const char *quelle, size_t groesse);
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 3.42 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@math.uni-sb.de>, Tobias Quathamer <toddy@debian.org>, Helge Kreutzmann <debian@helgefjell.de> und Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.19. Juli 2012 | GNU |