一、 函数原型
void *memcpy(void *destin, void *source, size_t n);
二、参数
destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
source-- 指向要复制的数据源,类型强制转换为 void* 指针。
n-- 要被复制的字节数。
三、返回值
该函数返回一个指向目标存储区destin的指针。(void*)
四、功能
从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中。
memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。
需要注意的是:
destin指针要分配足够的空间,也即大于等于 n 字节的空间。如果没有分配空间,会出现断错误。 [5]
destin和 source所指的内存空间不能重叠(如果发生了重叠,使用 memmove()会更加安全)。
五、头文件
C语言:#include<string.h>
六、使用
七、模拟实现
void* my_memcpy(void* dest, const void* src, size_t n)
{
for (int i = 0; i < n; i++)
{
*(char*)dest = *(char*)src;//强制类型转换,
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[10] = { 0 };
my_memcpy(arr2, arr1, 24);// 6*sizeof(int)=24
for (int i = 0; i < 10; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}