函数原型
void *memcpy(void *str1, const void *str2, size_t n)
表示 从存储区 str2 复制 n 个字节到存储区 str1。
特别注意是字节数,使用的时候经常默认是单字节的类型。
实例1:
char buf[10]={0,1,2,3,4,5,6,7,8,9};
memcpy(buf,buf+3,2);
printf();
这里就会打印出,3423456789,其中01就会被覆盖
实例2:
int buf[10]={0,1,2,3,4,5,6,7,8,9};
memcpy(buf,buf+3,2);
printf();
这里会打印,3123456789,其中就只有0会被覆盖。而不是理想中的01都被覆盖
甚至 memcpy(buf,buf+3,3);
memcpy(buf,buf+3,4); 打印出来的都是3123456789
注意点:这是因为最后一个参数n,指的是字节数,而不是个数,这个跟定义这个buf的数据类型有关系。如果你是 int类型,4字节,你的零实际在内存中是:0x00000000_00000000_00000000_00000000,所以正确的写法是:
memcpy(buf,buf+3,sizeof(int)*2);
这样打印出来的就是:34123456789