Using memcpy() when source and destination overlap can lead to undefined behaviour - in those cases only memmove() can be used.
But what if I know for sure buffers don't overlap - is there a reason to use specifically memcpy() or specifically memmove()? Which should I use and why?