table of contents
memcpy(3) | Library Functions Manual | memcpy(3) |
BEZEICHNUNG¶
memcpy - kopiert Speicherbereich
BIBLIOTHEK¶
Standard-C-Bibliothek (libc, -lc)
ÜBERSICHT¶
#include <string.h>
void *memcpy(void Ziel[restrict .n], const void Quelle[restrict .n], size_t n);
BESCHREIBUNG¶
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.
RÜCKGABEWERT¶
Die Funktion memcpy() gibt einen Zeiger auf Ziel zurück.
ATTRIBUTE¶
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert |
memcpy() | Multithread-Fähigkeit | MT-Sicher |
STANDARDS¶
C11, POSIX.1-2008.
GESCHICHTE¶
POSIX.1-2001, C89, SVr4, 4.3BSD.
WARNUNGEN¶
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).
SIEHE AUCH¶
bcopy(3), bstring(3), memccpy(3), memmove(3), mempcpy(3), strcpy(3), strncpy(3), wmemcpy(3)
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Helge Kreutzmann <debian@helgefjell.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 die Mailingliste der Übersetzer.
2. Mai 2024 | Linux man-pages (unveröffentlicht) |