It's also worth pointing out that buffers passed to strcpy, memcpy, etc. must not overlap. Otherwise it results in undefined behavior.
This allows, for example, compilers to replace a `memcpy()` call that has a constant size argument with direct loads/stores.