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. jsp页面取整数 和Java页面取整数
  2. 暴雪战斗公式——除法公式的精髓
  3. MySQL数据库-笔记04【查询练习题*8道(附解析)】
  4. (2)MongoDB副本集自动故障转移原理(含客户端)
  5. 即时通讯软件 的无锁数组操作
  6. php程序员应具有的7种能力
  7. 5G手机产业链将带动多少A股上市公司?
  8. 百度又做电商;ofo 退出日本;Kotlin 1.3 正式发布 | 极客头条
  9. 从0到1简易区块链开发手册V0.6-实现打印区块
  10. SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方...
  11. 关于社会工程学的利用
  12. 国美易卡线上操作流程,国美易卡利用科技力量
  13. python爬虫随心所欲地爬取百度图片
  14. 史上最全的javascript知识点总结,浅显易懂。
  15. 魔兽争霸英雄属性全揭秘
  16. Week15 作业 A - ZJM 与霍格沃兹 HDU - 1880
  17. oracle数据库数据导入导出步骤
  18. python创建目录
  19. 市场分析——行业背景分析
  20. 日语 罗马拼音 输入法规则

热门文章

  1. Debian配置Apache虚拟主机(IP、端口、域名)
  2. php mysql三_PHP 和 MySQL 基础教程(三)_MySQL
  3. 周鸿祎:360的未来是什么
  4. 基于微信平台的在线漫画阅读小程序设计与实现【附项目源码+论文说明】分享
  5. 如何做一个基于python外卖点餐系统毕业设计毕设作品(Django框架)
  6. 【教程】使用ChatGPT制作基于Tkinter的桌面时钟
  7. android 背景色动画,Android利用动画实现背景逐渐变暗
  8. 027 大数据之Azkaban调度系统
  9. 关于TP5.1框架一些基础知识小结
  10. 如何高效地做游戏测试?