Функция 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"
}