一、函数介绍
void * memcpy ( void * destination, const void * source, size_t num )
void * memmove ( void * destination, const void * source, size_t num )
由函数的定义我们可以看出,memcpy与memmove的参数和返回类型是完全一样的
而且它们的功能也是极其相似的,都是将由source指向地址为起始地址的连续n个字节的数据复制到以destination指向地址为起始地址的空间内
返回值:
返回类型为void*的,值与destination相同的指针
头文件:
二者的头文件均为#include<string.h>
二、注意点与区别
注:
1.这两个函数在遇到 '\0' 的时候并不会停下来。而是一定会拷贝完n个字节(即使后面的内存未被初始化)
2.如果目标处已经有内容,则使用这两个函数后会覆盖原有内容。
区别:
1.c语言标准中未规定memcpy可以拷贝目标地址与目的地址有重合的内存,如果source和destination有任何的重叠,复制的结果都是未定义的。(即使有些编译器可以拷贝成功,也不推荐这么使用)
2.而memmove函数处理的源内存块和目标内存块是可以重叠的。 如果源空间和目标空间出现重叠,就得使用memmove函数处理。