memcpy заменяет память, не добавляет.Если вы хотите использовать memcpy, ваш код должен быть немного более сложным.
void * memcpy (void * destination, const void * source, size_t num);
Когда вы передаетев mainbuf вы передаете один и тот же адрес назначения каждый раз.Вам нужно увеличивать адрес получателя каждый раз, когда вы используете memcpy, чтобы он помещал его в последующую память, вместо того, чтобы каждый раз перезаписывать одну и ту же строку.
Попробуйте вместо этого использовать strcat, он предназначен для объединения строк, что звучиткак то, что вы хотите сделать.Перед использованием убедитесь, что у вас осталось достаточно памяти, чтобы не возникало проблем с памятью.