La duda que me queda es qué es más recomendable el memcpy o el strncpy.
Depende.
memcpy() copia bytes, sin importarle nada más.
strncpy() actúa como copia de cadenas de caracteres, esto es, si encuentra un byte nulo en el buffer origen, a partir de ahí ya rellena con ceros el buffer destino hasta completar el tamaño requerido.
Usa
memcpy() para copiar buffers y
strncpy() para cadenas de caracteres.
Saludos