区别:
memmove 重叠时能保证 dst 数据正常,但 memcpy 就不会保证了。
#include <string.h>
#include <stdio.h>
int main()
{
// case 1: not overlap
char str[6] = "12345";
memmove(str + 2, str, 2);
printf("memmove: %s\n", str); // 12125 - ok
char str2[6] = "12345";
memcpy(str2 + 2, str2, 2);
printf("memmove: %s\n", str2); // 12125 - ok
// case 2: overlap
char str3[6] = "12345";
memmove(str3 + 2, str3, 3); // the 3rd byte overlap
printf("memmove: %s\n", str3); // 12123 - ok
char str4[6] = "12345";
memcpy(str4 + 2, str4, 3);
printf("memmove: %s\n", str4); // 12121 - wrong
return 0;
}