一、memcpy的描述
从src中复制sz个字节到目标dest中
二、memcpy的头文件
#include<string.h>
原型 :void* memcpy(voiddest,const voidsrc,size_t sz)
三、memcpy演示
void* my_memcpy(void* dest, const void* src, int sz)
{
assert(dest != NULL);
assert(src != NULL);
char* p = (char*)dest;
char* s = (char*)src;
while (sz--) {
*p++ = *s++;
}
return dest;
}
char str1[20] = {0};
const char str2[20] = "jkl";
int sz =3*sizeof(char) ;//当要复制整型时为sizeof(int),类型要相对应
my_memcpy(str1, str2,sz);//sz是字节数
列子:
int main()
{
int str1[20] = {0};
const int str2[20] = {1,2,3,4,5,6};
int sz = 4;//sz为4,跳过4个字节
my_memcpy(str1, str2,sz);//sz是字节数
int i = 0;
for(i=0;i<sz;i++)
printf("%d",str1[i]);
//输出结果为1000,只将int类型1的4个字节复制过去了,所以一般建议写成int sz=sizeof(相应的类型)*想要复制的个数
return 0;
}
int sz = 4*sizeof(int);//sz为16,跳过16个字节
my_memcpy(str1, str2,sz);//sz是字节数
int i = 0;
for(i=0;i<4;i++)
printf("%d",str1[i]);//输出结果为1234
return 0;
选择从哪里开始复制的列子:
my_memcpy(str1, str2+2,sz);//我们还可以选择从哪里开始复制,str2+2表示跳过两个元素从第三个元素开始,输出结果为3456
四,memcpy出现重叠的情况
int str1[20] = {1,2,3,4,5,6};
int sz = 4*sizeof(int);
my_memcpy(str1+2, str1,sz);//当内存出现折叠,结果不一定正确
int i = 0;
for(i=0;i<4;i++)
printf("%d",str1[i]);//输出结果为1212
return 0;
1,2将后面的3,4覆盖了,因此复制3,4的时候其实复制的是1,2