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 *,如果不是需要先转换后再使用偏移。

 

posted @ 2020-11-26 14:06  vonly  阅读(1820)  评论(0编辑  收藏  举报