一、 函数原型
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)=24for (int i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}