Функция memmove
Функция memmove копирует указанное количество байт
из одного участка памяти в другой. Главное отличие
от функции memcpy заключается в том, что
memmove корректно работает с перекрывающимися
областями памяти: если источник и назначение пересекаются,
функция сначала копирует данные во временный буфер,
а затем переносит их в место назначения. В первый
параметр мы передаем указатель на место назначения,
во второй - указатель на источник данных, а в третий -
количество байт для копирования.
Синтаксис
void* memmove(void* dest, const void* src, size_t count);
Пример
Давайте скопируем 3 байта из одной строки в другую:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char src[] = "abcde";
char dest[10] = "";
memmove(dest, src, 3);
dest[3] = '\0';
cout << dest << endl;
return 0;
}
Результат выполнения кода:
"abc"
Пример
Давайте скопируем участок строки поверх самой себя,
сдвинув символы вправо. Функция memmove корректно
обработает перекрытие:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[] = "12345";
memmove(str + 1, str, 4);
cout << str << endl;
return 0;
}
Результат выполнения кода:
11234