Пожалуйста, отправьте полный код. Вы упоминаете «они memcopy» (я полагаю, вы ссылаетесь на memcpy), но я вижу только набор memset (*, 0). Надеюсь, вы их не путаете.
Кроме того, «они добавили значение в структуру, используя memcopy, который, я знаю, является правильным способом», не совсем верно. Это не обязательно неправильно, НО ... char * в основном интерпретируется как строка C. это массив байтов, которые представляют символы, которые ДОЛЖНЫ заканчиваться нулем (то есть последний символ должен быть 0, что эквивалентно '\ 0'). Правильный способ копирования строк - использование strcpy () (или strcpy_s в windows), разница в том, что memcpy быстрее и используется в других ситуациях (таких как указатели \ управление буфером).
unsigned char * не очень используется (по крайней мере, я никогда не видел его до сих пор). В качестве заметки читайте о char, unsigned char, подписанном char, char [] и char * (не то, чтобы он каким-либо образом изменял ваш код, а просто чтобы убедиться, что вы понимаете различия).
Что касается копирования данных, я предполагаю, что вы имеете в виду src, dst и type из pearson_record в header, правильно? Если так, то для простоты я хотел бы предложить memcpy, но вы говорите, что к каждому элементу обращаются как [i]. Означает ли это, что header.src - это массив из более чем одного pearson_record.src или header.src [i] соответствует pearson_record.src [i]? Это немного неясно для меня.
Существует разница между char * src и char * * src.