mem系列的函数只要是内存,就能够使用.
一.memcpy
描述
C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。
声明
下面是 memcpy() 函数的声明。
void *memcpy(void *str1, const void *str2, size_t n)
使用void*就可以兼容不同各种类型的指针,实参是int*,char*,结构体*都可以,在函数内部,其实也不需要关注这些指针的真实类型,就只是按照字节的个数来进行拷贝即可.
参数
- str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
- n -- 要被复制的字节数。
返回值
该函数返回一个指向目标存储区 str1 的指针。为了能够进行链式的调用.
二.memmove
描述
C 库函数 void *memmove(void *str1, const void *str2, size_t n) 从 str2 复制 n 个字符到 str1.
声明
下面是 memmove() 函数的声明。
void *memmove(void *str1, const void *str2, size_t n)
参数
- str1 -- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
- str2 -- 指向要复制的数据源,类型强制转换为 void* 指针。
- n -- 要被复制的字节数。
返回值
该函数返回一个指向目标存储区 str1 的指针。
memmove这个函数也是进行内存拷贝,和memcpy最大的区别就是可以支持内存重叠的情况
如果出现内存重叠的情况,memmove就会"反着拷贝",如果不重叠,正着拷贝即可.那么啥时候需要反着拷贝?当str2<=str1<=str2+size