std:: memmove
|
Definiert im Header
<cstring>
|
||
|
void
*
memmove
(
void
*
dest,
const
void
*
src,
std::
size_t
count
)
;
|
||
Führt die folgenden Operationen in der angegebenen Reihenfolge aus:
- Erstellt implizit Objekte an dest .
- Kopiert count Zeichen (als ob vom Typ unsigned char , im Folgenden gleich) vom Objekt, auf das src zeigt, in ein temporäres Array arr von count Zeichen, wobei arr sich nicht mit den Objekten überschneidet, auf die dest und src zeigen.
- Kopiert count Zeichen von arr in das Objekt, auf das dest zeigt.
Wenn dest oder src ein Nullzeiger oder ungültiger Zeiger ist, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| dest | - | Zeiger auf den Speicherbereich, in den kopiert werden soll |
| src | - | Zeiger auf den Speicherbereich, aus dem kopiert werden soll |
| count | - | Anzahl der zu kopierenden Bytes |
Rückgabewert
Falls ein geeignetes erstelltes Objekt vorhanden ist, gibt es einen Zeiger darauf zurück; andernfalls wird dest zurückgegeben.
Hinweise
Obwohl die Spezifikation besagt, dass ein temporärer Puffer verwendet wird, verursachen tatsächliche Implementierungen dieser Funktion nicht den Aufwand von doppeltem Kopieren oder zusätzlichem Speicher. Für kleine count kann es Register laden und zurückschreiben; für größere Blöcke ist ein gängiger Ansatz (glibc und bsd libc), Bytes vorwärts vom Anfang des Puffers zu kopieren, wenn das Ziel vor der Quelle beginnt, und rückwärts vom Ende andernfalls, mit einem Fallback zu std::memcpy wenn es überhaupt keine Überlappung gibt.
Wo
strict aliasing
die Untersuchung desselben Speichers als Werte zweier unterschiedlicher Typen verbietet,
std::memmove
zur Konvertierung der Werte verwendet werden kann.
Beispiel
Ausgabe:
1234567890 1234456890
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 4064 | C++98 | es war unklar, ob der zurückgegebene Zeiger auf ein geeignet erstelltes Objekt zeigt | klargestellt |
Siehe auch
|
kopiert einen Puffer in einen anderen
(Funktion) |
|
|
füllt einen Puffer mit einem Zeichen
(Funktion) |
|
|
kopiert eine bestimmte Anzahl von Breitzeichen zwischen zwei, möglicherweise überlappenden, Arrays
(Funktion) |
|
|
(C++11)
|
kopiert einen Bereich von Elementen an einen neuen Speicherort
(Funktions-Template) |
|
kopiert einen Bereich von Elementen in umgekehrter Reihenfolge
(Funktions-Template) |
|
|
(C++11)
|
prüft, ob ein Typ trivial kopierbar ist
(Klassen-Template) |
|
C-Dokumentation
für
memmove
|
|