• memcpy 与 memmove 区别


    http://blog.csdn.net/lwbeyond/article/details/6830424

    memcpy() -- 拷贝内存内容

    表头文件: #include <string.h>
    定义函数: void *memcpy(void *dest, const void *src, size_tn)
    函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束''而结束
    返回值:   返回指向dest的指针
    附加说明: 指针src和dest所指的内存区域不可重叠

    重叠的例子:

    [cpp] view plain copy
     
    1. #include <string.h>  
    2. #include <stdio.h>  
    3.   
    4. int main()  
    5. {  
    6.   int i = 0;  
    7.   int a[10];  
    8.   
    9. /*0 1 2 3 4 5 6 7 8 9 */  
    10.   for(i; i < 10; i++)  
    11.   {  
    12.     a[i] = i;  
    13.   }  
    14.   
    15. /*首先a[0]->a[4],但是a[4]再次操作时出现的重叠*/  
    16.   memmove(&a[4], a, sizeof(int)*6);    
    17.   
    18. /*0 1 2 3 0 1 2 3 0 1 不可以内存重叠*/  
    19.   for(i = 0; i < 10; i++)  
    20.   {  
    21.     printf("%d ",a[i]);  
    22.   }  
    23.   
    24.   printf(" ");  
    25. }  
    
    
    

    memmove() -- 拷贝内存内容

    表头文件: #include <string.h>

    定义函数: void *memmove(void *dest, const void *src, size_t n);

    函数说明:memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。

    不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些。

    返回值: 返回指向dest的指针。附加说明: 指针src和dest所指的内存区域可以重叠。

    重叠的例子:

    [cpp] view plain copy
     
    1. <pre name="code" class="plain">#include <string.h>  
    2. #include <stdio.h>  
    3.   
    4. int main()  
    5. {  
    6.   int i = 0;  
    7.   int a[10];  
    8.   
    9. /*0 1 2 3 4 5 6 7 8 9 */  
    10.   for(i; i < 10; i++)  
    11.   {  
    12.     a[i] = i;  
    13.   }  
    14.   
    15. /*首先a[0]->a[4],但是a[4]再次操作时出现的重叠*/  
    16.   memmove(&a[4], a, sizeof(int)*6);    
    17.   
    18. /*0 1 2 3 0 1 2 3 4 5 可以内存重叠*/  
    19.   for(i = 0; i < 10; i++)  
    20.   {  
    21.     printf("%d ",a[i]);  
    22.   }  
    23.   
    24.   printf(" ");  
    25. }</pre>  
    26. <pre></pre>  
    27. <br>  
    28. <span style="font-size:18px">有时VC和GCC结果显示二者一样,这是因为编译器都优化成了可以考虑内存重叠的情况。</span><strong><span style="font-size:18px"><br>  
    29. </span></strong><br>  
  • 相关阅读:
    在Pycharm中使用GitHub
    Ubuntu20.04开启root账户的方法步骤
    使用git push文件到gitee
    Dell主机安装win10+Ubuntu20.04双系统
    Golang select 基础语法与用法
    Golang websocket 实现消息推送
    Golang + gRPC 实践
    Golang实现RPC
    unigui+fastReport实现web打印方案(43)
    [控件] 加强版 TOneSelection (改良自 Berlin 10.1 TSelection)
  • 原文地址:https://www.cnblogs.com/honeybusybee/p/5257810.html
Copyright © 2020-2023  润新知