memccpy() функция языка Си. Копирование блока памяти с поиском символа.

Функция memccpy() осуществляет копирование заданного количества байт или до первого нахождения заданного символа (включая его). Области памяти src и dst не должны пересекаться. Для пересекающихся областей используется memmove(). Для копирования только заданного количества байт используется memcpy().


#include <string.h>
void *memccpy(void *dst, const void *src, int ch, size_t n);
void *ptr = memccpy(dst, src, 'v', 20); // Копировать 20 байт или до нахождения символа v
dst - буфер назначения
src - откуда копировать байты
сh - символ для поиска
n - количество байт для копирования
Возвращает указатель в dst на следующий символ после ch (видимо для последующего копирования в dst), или NULL если символ не найден в src

#include <stdio.h> // prinf()
#include <string.h> // memccpy(), strlen(), memset()
int main(){
    const char *src = "Hi Victor, nice day!"; // Строка для копирования
    int str_size = strlen(src); // Размер строки без завершающего символа
    const char dst[str_size + 1]; // Строка назначения, выделяем память с учетом завершающего символа
    memset((void *)dst, 0, str_size + 1); // Обнуляем массив заполняем символами конца строки)
    printf("&dst = %p \n", dst); // "&dst = 000000000061FDA0"
    void *ptr = memccpy((void *)dst, (void *)src, 'c', str_size); // Копируем до нахождения символа 'c'
    printf("%s, ptr = %p \n", dst, ptr); // "Hi Vic, ptr = 000000000061FDA6"
    ptr = memccpy((void *)dst, (void *)src, 'n', str_size); // Копируем до нахождения символа 'n'
    printf("%s, ptr = %p \n", dst, ptr); // "Hi Victor, n, ptr = 000000000061FDAC"
    ptr = memccpy((void *)dst, (void *)src, 'z', str_size); // Копируем всю строку
    printf("%s, ptr = %p \n", dst, ptr); // "Hi Victor, nice day!, ptr = 0000000000000000"
}
2023-03-14



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

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

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

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