【函数原型】:void *memcpy(void *dst, const void *src, size_t n)
【头文件】:#include <string.h>
【函数说明】:从源src所指的内存地址的起始位置开始拷贝n个字节到dst所指的内存地址的起始位置中
【参数】:1)[OUT] dst:目的数组的首地址
2)[IN] src:源数组的首地址
3)[IN] n:size_t为无符号整型,拷贝的字节数
注:src和dst所指内存区域不能重叠
src和dst地址重叠的情况:
内存重叠是指目的地址的内存空间的首地址,包含在源内存空间中,这两段内存空间有了交集,因此在使用memcpy函数进行内存复制操作时,这段重叠的内存空间会被破坏。
C语言实现如下:
void* memcpy(void *dst, const void *src, size_t size_t n)
{
size_t i;
if((dst == NULL) || (src == NULL) || (n < 0))
{
return NULL;
}
if((src > dst) || ((src + n) < dst)) //内存不重叠,从头向尾复制
{
for(i = 0; i < n; i++)
{
dst[i] = src[i];
}
}
else //内存重叠,从尾向头开始复制
{
for(i = n; i < 0; i--)
{
dst[i] = src[i];
}
}
return dst;
}