memcpy

memcpy的函数原型是void *memcpy(void *dest, const void *src, size_t n),其功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。memcpy则是根据其第3个参数决定复制的长度。函数返回指向destin的指针,作用为:将s中第13个字符开始的4个连续字符复制到d中。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。
基础资料
  • 中文名:内存拷贝函数
  • 外文名:memcpy
  • 功能:拷贝n个字节
  • 函数原型:见正文
  • 所在头文件:或
  • 返回值:指向dest的指针
  • 简介

    函数原型

    void *memcpy(void *dest, const void *src, size_t n);

    功能

    从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

    所需头文件

    C语言:#include

    C++:#include

    说明

    1.source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被复盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针.

    2.如果目标数组destin本身已有数据,执行memcpy()后,将复盖原有数据(最多复盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。

    注意:source和destin都不一定是数组,任意的可读写的空间均可。

    函数实现

    Linux中

    程序例example1

    输出结果:Golden Global View

    example2

    作用:将s中第13个字符开始的4个连续字符复制到d中。(从0开始)

    输出结果:View

    example3

    作用:复制后复盖原有部分数据

    输出结果:

    destination before memcpy:abcdefghijlkmnopqrstuvwxyz0123as6

    destination after memcpy: ******************************as6

    区别

    strcpy和memcpy主要有以下3方面的区别。

    1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

    2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

    3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

    案例

    example1

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    // memcpy.c

    #include

    #include

    int main ()

    {

    char *s="Golden Global View";

    char d[20];

    clrscr();

    memcpy(d,s,(strlen(s)+1));

    printf("%s",d);

    getchar();

    return 0;

    }

    example2

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    #include

    int main()

    {char *s="Golden Global View";

    char d[20];

    memcpy(d,s+14,4); //从第14个字符(V)开始复制, 连续复制 4个字符(View)

    //memcpy(d,s+14*sizeof(char),4*sizeof(char));也可

    d[4]='\0';

    printf("%s",d);

    getchar();

    return 0;

    }

    example3

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    #include

    #include

    int main( void )

    {

    char src[] = "******************************";

    char dest[] = "abcdefghijlkmnopqrstuvwxyz0123as6";

    printf("destination before memcpy: %s\n", dest);

    memcpy(dest, src, strlen(src));

    printf("destination after memcpy: %s\n", dest);

    return 0;

    }

    首页
    科技
    #贵族
    最新入驻
    贾科莫·普契尼
    Caroline Lufkin
    翁建宇
    相关阅读
    导入库
    内容词条·2757人浏览
    NewSQL
    内容词条·6927人浏览
    WebRTC
    内容词条·6941人浏览
    SIP协议栈
    内容词条·5187人浏览
    SCM421
    内容词条·5864人浏览
    SCM415
    内容词条·6人浏览
    • 网站地图
    • |

    Copyright 2023 fuwu029.com赣ICP备2022008914号-4