memcpy 内存拷贝函数
其功能是从源src所指内存地址的起始位置拷贝n 个字符到目的dst 所指内存地址的起始位置。
注意:memcpy函数不能解决内存重叠问题, 而memmove函数能够很好的解决这一问题,下一篇中会详细说明。
函数实现:
void *my_memcpy(void *dst, const char *src, int count)
{
assert(src);
assert(dst);
assert(count > 0);
char *ret = dst;
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}
测试用例:
//用例1
int main()
{
char arr1[] = "hello";
char arr2[] = "world";
char *res = (char*)my_memcpy(arr1, arr2, 3);
printf("%s\n", res);
return 0;
}
//用例2
int main()
{
char arr1[] = "hello";
char *res = (char*)my_memcpy(arr1, arr1+1, 3);
printf("%s\n", res);
return 0;
}
//用例三
int main()
{
char arr1[] = "hello";
char *res = (char*)my_memcpy(arr1+1, arr1, 3);
printf("%s\n", arr1);
return 0;
}
显然,在用例3中,当内存重叠时,不能输出期待结果。
memcpy函数只是按照用户需求从第一个字符开始一个一个的将n 个源字符串中的字符从拷贝到目的字符串上,不对内存重叠问题做处理。