memcpy函数及其模拟实现

一、 函数原型

void *memcpy(void *destin, void *source, size_t n);

二、参数

  • destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。

  • source-- 指向要复制的数据源,类型强制转换为 void* 指针。

  • n-- 要被复制的字节数。

三、返回值

该函数返回一个指向目标存储区destin的指针。(void*)

四、功能

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

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

需要注意的是:

  • destin指针要分配足够的空间,也即大于等于 n 字节的空间。如果没有分配空间,会出现断错误。 [5]

  • destin和 source所指的内存空间不能重叠(如果发生了重叠,使用 memmove()会更加安全)。

五、头文件

C语言:#include<string.h>

六、使用

七、模拟实现

void* my_memcpy(void* dest, const void* src, size_t n)
{
    for (int i = 0; i < n; i++)
    {
        *(char*)dest = *(char*)src;//强制类型转换,
        dest = (char*)dest + 1;
        src = (char*)src + 1;
    }
}

int main()
{
    int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int arr2[10] = { 0 };
    my_memcpy(arr2, arr1, 24);//  6*sizeof(int)=24
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr2[i]);
    }
    return 0;
}

相关推荐

  1. memcpy的使⽤和模拟实现

    2024-03-14 08:34:04       36 阅读
  2. c---内置函数模拟(memset,memcmp,memcpy,memmove)

    2024-03-14 08:34:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 08:34:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 08:34:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 08:34:04       82 阅读
  4. Python语言-面向对象

    2024-03-14 08:34:04       91 阅读

热门阅读

  1. 暴雨信息:可持续转型更需要“以人为本”

    2024-03-14 08:34:04       39 阅读
  2. Android Selinux详解[五]--新增hal服务标签相关

    2024-03-14 08:34:04       42 阅读
  3. mysql数据导出、导入

    2024-03-14 08:34:04       49 阅读
  4. 计算机视觉

    2024-03-14 08:34:04       43 阅读
  5. Mybatis多表映射之一对多映射

    2024-03-14 08:34:04       48 阅读
  6. Mybatis-plus手写SQL如何使用条件构造器和分页

    2024-03-14 08:34:04       43 阅读
  7. Python之函数进阶-柯里化

    2024-03-14 08:34:04       37 阅读
  8. 蓝桥杯2023年-砍树(dfs,树上差分)

    2024-03-14 08:34:04       35 阅读
  9. [Django 0-1] Core.Checks 模块

    2024-03-14 08:34:04       41 阅读