memmove() функция языка Си. Перемещение областей памяти.

Перемещает байты из одной области памяти в другую. Заявлено что области памяти могу перекрываться, но у меня это приводит к ошибке сегментации памяти...


#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 при попытке использовать перекрывающиеся участки памяти
}
2023-03-14



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

Статические и динамические массивы в языке Си. Описание и примеры кода.

#include void * malloc(size_t size_in_bytes); // size_in_bytes - Размер памяти требуемый для выделения, в байтах. // Возвращаемое значение - указатель на начало блока непрерывной выделенной памяти. Или ноль в случае неудачи.
memccpy() функция языка Си. Копирование блока памяти с поиском символа.
memcpy() функция языка Си. Копирование области памяти.
memmove() функция языка Си. Перемещение областей памяти.
restrict ключевое слово языка Си.
sizeof оператор в языке Си. Узнать размер переменной.