Перемещает байты из одной области памяти в другую. Заявлено что области памяти могу перекрываться, но у меня это приводит к ошибке сегментации памяти...
#include <string.h>
void *memmove(void *dst, const void *src, size_t n);
void *ptr = memmove((void *)dst, (void *)src, 4); // Копируем 4 символа
dst - буфер назначения
src - откуда копировать байты
n - количество байт для копирования
Возвращает указатель на dsto
#include <stdio.h> // prinf()
#include <string.h> // memmove(), strlen(), memset()
int main(){
const char *src = "0123456789"; // Строка для обработки
int str_size = strlen(src); // Размер строки без завершающего символа
const char dst[str_size + 1]; // Строка для записи
memset((void *)dst, 0, str_size + 1); // Обнуляем массив заполняем символами конца строки)
void *ptr = memmove((void *)dst, (void *)src, 4); // Копируем 4 символа
printf("src = %s, dst = %s, dst_addr = %p, ptr_addr = %p \n", src, dst, dst, ptr); // "src = 0123456789, dst = 0123, dst_addr = 000000000061FDB0, ptr_addr = 000000000061FDB0"
void *ptr1 = memmove((void *)(src + 2), (void *)src, 4); // Ошибка!!! SIGSEGV при попытке использовать перекрывающиеся участки памяти
}