memmove
Learned about this through Ryan, Shaheer’s friend.
https://cplusplus.com/reference/cstring/memmove/
Basically, the difference with memmove is that it does extra work to handle for cases where there is overlapping memory addresses.
Source:
he memory in memcpy
cannot overlap or you risk undefined behaviour, while the memory in memmove
can overlap.
char a[16];
char b[16];
memcpy(a,b,16); // Valid.
memmove(a,b,16); // Also valid, but slower than memcpy.
memcpy(&a[0], &a[1],10); // Not valid since it overlaps.
memmove(&a[0], &a[1],10); // Valid.