emcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下:
void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);
它们都是从src所指向的内存中复制count个字节到dst所指内存中,并返回dst的值。我们知道他们的位置关系有四种:src在前,dst在后不交叉;src在后,dst在前不交叉;src在前,dst在后有交叉;src在后,dst在前有交叉。对于这四种情况,当源内存区域和目标内存区域无交叉时,两者的结果是一样的,但如果有交叉呢?先看下图:
图的上半部分为源内存区域在目标内存区域右边,下半部分为源内存区域在目标区