memcpy - kopiert Speicherbereich
Standard-C-Bibliothek (
libc,
-lc)
#include <string.h>
void *memcpy(void Ziel[restrict .n], const void Quelle[restrict .n],
size_t n);
Die Funktion
memcpy() kopiert
n Byte von Speicherbereich
Quelle nach Speicherbereich
Ziel. Die Speicherbereiche
dürfen sich nicht überschneiden. Verwenden Sie
memmove(3), wenn sich die Speicherbereiche überschneiden.
Die Funktion
memcpy() gibt einen Zeiger auf
Ziel zurück.
Siehe
attributes(7) für eine Erläuterung der in diesem
Abschnitt verwandten Ausdrücke.
Schnittstelle |
Attribut |
Wert |
memcpy() |
Multithread-Fähigkeit |
MT-Safe |
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
Ignorierung der Anforderung, dass sich Speicherbereiche nicht überlappen,
ist die Quelle von erheblichen Fehlern. (POSIX und der C-Standard sagen
deutlich, dass der Einsatz von
memcpy() mit überlappenden
Bereichen undefiniertes Verhalten hervorruft.) Insbesondere eine
Leistungsoptimierung von
memcpy() in Glibc 2.13 auf einigen Plattformen
(darunter x86-64) führten zur Änderung der Reihenfolge in der
Bytes von
Quelle nach
Ziel kopiert wurden.
Diese Änderung deckte Defekte in einer Reihe von Anwendungen auf, die
überlappende Bereiche kopierten. Unter der bisherigen Implementierung
hatte die Reihenfolge, in der Bytes kopiert wurden, den Fehler
zufälligerweise versteckt, was dann bei der Änderung der
Kopierreihenfolge aufgedeckt wurde. Unter Glibc 2.14 wurde ein versioniertes
Symbol hinzugefügt, so dass alte Programme (d.h. solche, die gegen
Glibc-Versionen älter als 2.14 gelinkt worden waren) eine
memcpy()-Implementierung einsetzten, die solche überlappende
Pufferfälle sicher handhabt (indem sie eine
»ältere« Implementierung von
memcpy() verwendet,
die als
memmove(3) bekannt gemacht wurde).
bcopy(3),
bstring(3),
memccpy(3),
memmove(3),
mempcpy(3),
strcpy(3),
strncpy(3),
wmemcpy(3)
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother
<
[email protected]>, Martin Eberhard Schauer <
[email protected]>
und Helge Kreutzmann <
[email protected]> 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 die
Mailingliste
der Übersetzer