C语言字符串字节数组拷贝memmove,memcpy函数地址偏移使用
C 库函数 void *memmove(void *dest, const void *src, size_t n) 从 src复制 n 个字符到 dest,
C 库函数 void *memcpy(void *dest, const void *src, size_t n) 从存储区 src复制 n 个字节到存储区 dest。
但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。
如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。
如果目标区域与源区域没有重叠,则和 memcpy() 函数功能相同。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ const char dest[] = "1234567890"; const char src[] = "abcdefghij"; printf("处理之前 dest = %s, src = %s\n", dest, src); memmove(dest, src, 3); printf("直接处理 dest = %s, src = %s\n", dest, src); memmove(dest+4, ((char * )src)+3, 3); printf("偏移处理 dest = %s, src = %s\n", dest, src); return 0; }
目标dest类型可以是 cahr[] ,也可以是char * ,可以直接使用偏移,
源src参数类型必须是 char *,如果不是需要先转换后再使用偏移。