memcpy函数

头文件:<string.h>

函数功能:将从源地址source开始的num个字节复制到目标地址destination处

函数参数及返回值类型:void* memcpy(void* destination, const void* source, size_t num)

参数解释:

1.因为不确定要复制的数据是什么类型的,所以指针类型设计为void类型

2.用const来保护源地址处的数据,以防止数据被篡改

3.函数的返回类型是无类型指针类型

函数使用:

包含源地址的数组arr1:arr1[10]={1,2,3,4,5,6,7,8,9,10};

包含目标地址的数组arr2:arr2[5]={0};

将数组arr1的后五个数据复制到数组arr2中

输出结果:arr2:arr2[5]={6,7,8,9,10};

代码实现:

#include <stdio.h>#include <string.h>int main()
{int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[5] = { 0 };memcpy(arr2, arr1+5, 20);for (int i = 0; i < 5; i++){printf("%d\n", arr2[i]);}return 0;
}

代码实现memcpy函数的功能:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void* my_memcpy(void* dest, const void* sour, size_t num)
{//将源内存中的num个字节复制到目标内存中assert(dest && sour);void* temp=dest;char* dest1 = ((char*)dest);char* sour1 = ((char*)sour);while (num){*dest1 = *sour1;dest1++;sour1++;num--;}return temp;
}
int main()
{int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[5] = { 0 };my_memcpy(arr2, arr1+5, 20);for (int i = 0; i < 5; i++){printf("%d\n", arr2[i]);}return 0;
}

注意事项:

1.将destination和source的类型转化至字符指针类型,这样加1时跳过一个字节,步长为1;

2.为什么dest++编译不成功,因为强制转化类型是一个临时的状态,使用完之后。dest又重新变成了无类型指针变量,无法确定+1的步长,可以写成:`dest=(char*)dest+1`,sour指针也是如此;

3.可以加一个断言assert(头文件->assert.h),判断 dest 和 sour 指针是否为空指针;

4.如果源地址与目标地址的空间有冲突的话,就不能成功拷贝,因为数据被篡改了,memcpy函数应该拷贝不重叠的内存;

5.C语言规定memcpy函数只要实现了不重叠内存的拷贝就可以了,但是VS中的memcpy超额完成了任务,可以实现重叠和不重叠内存的拷贝;

下篇文章介绍内存函数memmove函数。

特别鸣谢:哔哩哔哩比特鹏哥的视频教程

内存函数-----Memcpy函数相关推荐

  1. c语言内存拷贝 memcpy()函数

    需包含头文件:C 标准库 - <string.h> 文章目录 描述 声明 参数 返回值 实例1 实例2 实例3:覆盖原有部分数据 描述 C 库函数 void *memcpy(void *s ...

  2. c语言memcpy函数源代码,memcpy函数-memcpy函数,C语言

    本教程分享:<memcpy函数>, memcpy是memorycopy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下:. void * memcpy ; .如 ...

  3. C和指针之memmove函数 memcpy函数 strcspn函数 strspn函数 strrstr函数实现

    1  memmove函数的实现 #include <stdio.h> #include <string.h>void* my_memmove(void*dest, const ...

  4. c语言中memcpy函数_带有示例的C中的memcpy()函数

    c语言中memcpy函数 memcpy()函数 (memcpy() function) memcpy() is a library function, which is declared in the ...

  5. c语言memcpy是什么,C语言memcpy函数的用法

    介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...

  6. 字符函数和字符串函数(函数介绍)

    目录 1.strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 1 ...

  7. 函数 —— strncpy() (内存重叠) memcpy() memmove() 一个字符串拷贝给另一个字符串

    char *strncpy(char *dest, const char *src, size_t n) *strncpy(char *dest, const char *src, size_t n) ...

  8. C 中的内存操作函数-memcpy 等(to be continued)

    文章目录 C中的内存操作函数 1.memcpy() 1.1 函数介绍 1.2 示例代码 1.3 Reference C中的内存操作函数 1.memcpy() 1.1 函数介绍 void *memcpy ...

  9. 内存拷贝函数memcpy相关解析(C语言)

    memcpy方法解析 内存拷贝函数的一般用法 memcpy()函数的拷贝原理分析 以深浅拷贝为例分析memcpy的拷贝原理 用memcpy()函数与不用memcpy()函数进行拷贝数据的区分 内存拷贝 ...

最新文章

  1. mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法
  2. Python 命名空间/名称查询 对效率的影响
  3. 推荐系统算法_机器学习和推荐系统(二)推荐算法简介
  4. Hyper-V实战:高可用性-网络规划篇(Hyper-V1.0)
  5. Python2 常见问题
  6. python笔试题 github_简单的python面试题,居然
  7. 计算机在轻化工程中的应用,计算机在轻化工程专业中的应用-中国大学mooc-题库零氪...
  8. 信息学奥赛一本通 1112:最大值和最小值的差 | OpenJudge NOI 1.9 05
  9. 程序员画图工具Draw.io
  10. IOS UI Automation 学习之常用类,方法和模拟手势
  11. python使用字典描述学生信息_Python字典(Dictionary)操作详解
  12. 如何吸引小白用户爱上你的游戏?
  13. 计算机修改了服务如何恢复,怎么修复MSDTC服务?
  14. 27种主流编程语言分类及优劣
  15. 快递柜智能柜C语言程序,家用智能快递柜的设计与实现(含电路图)
  16. BugTracker配置
  17. PostgreSQL alter语法
  18. java中成员变量的加载时机_工作奇谈——JAVA高级特性之反射
  19. Linux分卷压缩zip文件命令,Linux分卷压缩与解压缩
  20. matlab流场可视化后处理

热门文章

  1. 第一次写点东西,希望是个好的开始
  2. 【技术】烦死了,HTML 怎么转图片?
  3. JavaScript 时钟案例
  4. IEEE TIE主编——如何发表高水平期刊论文
  5. 使用 Moco 搭建一个模拟服务器
  6. com词根词缀_词根commod = 便利,方便
  7. 无法打开位置服务器,Win10定位服务无法开启灰色不可用怎么办?
  8. win2012文件服务器添加角色,win2012系统无法添加角色处理教程
  9. vscode 配置代码片段
  10. 关于.NET的SMTP的问题:如不支持ESMTP(身份认证)等等