• c语言 memcpy()


    原文地址:https://blog.csdn.net/qq_21792169/article/details/50561570

    头文件:#include <string.h>

    memcpy() 用来复制内存,其原型为:
        void * memcpy ( void * dest, const void * src, size_t num );

    memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上。

    memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。

    需要注意的是:

        dest 指针要分配足够的空间,也即大于等于 num 字节的空间。如果没有分配空间,会出现断错误。
        dest 和 src 所指的内存空间不能重叠(如果发生了重叠,使用 memmove() 会更加安全)。


    与 strcpy() 不同的是,memcpy() 会完整的复制 num 个字节,不会因为遇到“”而结束。

    【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。


    代码示例:

        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        #define N (10)
        int main()
        {
        char* p1 = "abcde";
        char* p2 = (char*)malloc(sizeof(char) * N);
        char* p3 = (char*)memcpy(p2, p1, N);
        printf("p2 = %s
    p3 = %s
    ", p2, p3);
        free(p2);
        p2 = NULL;
        p3 = NULL;
        system("pause");
        return 0;
        }
    运行结果:
    p2 = abcde
    p3 = abcde

    代码说明:
    1) 代码首先定义p1,p2,p3三个指针,但略有不同,p1指向一个字符串字面值,给p2分配了10个字节的内存空间。

    2) 指针p3通过函数memcpy直接指向了指针p2所指向的内存,也就是说指针p2、p3指向了同一块内存。然后打印p2,p3指向的内存值,结果是相同的。

    3) 最后按照好的习惯释放p2,并把p3也置为NULL是为了防止再次访问p3指向的内存,导致野指针的发生。
    ---------------------
    作者:HeroKern
    来源:CSDN
    原文:https://blog.csdn.net/qq_21792169/article/details/50561570
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Poj2104-K-th Number(主席树)
    Poj3237-Tree(树链剖分)
    Spoj QTREE(树链剖分)
    字符串算法
    网络流算法
    利用DiDiSoft OpenPGP Library for .NET 程序加密解密文件
    利用GPG4Win加密解密文件
    .NET Standard和.NET Framework的区别【转】
    Aras学习笔记 (6) Aras Client Side代码弹出标准ItemType内容窗口
    WebClient使用DownloadFile下载文件超时的解决办法
  • 原文地址:https://www.cnblogs.com/minmin123/p/11927264.html
Copyright © 2020-2023  润新知