内存函数-----Memcpy函数
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函数相关推荐
- c语言内存拷贝 memcpy()函数
需包含头文件:C 标准库 - <string.h> 文章目录 描述 声明 参数 返回值 实例1 实例2 实例3:覆盖原有部分数据 描述 C 库函数 void *memcpy(void *s ...
- c语言memcpy函数源代码,memcpy函数-memcpy函数,C语言
本教程分享:<memcpy函数>, memcpy是memorycopy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下:. void * memcpy ; .如 ...
- C和指针之memmove函数 memcpy函数 strcspn函数 strspn函数 strrstr函数实现
1 memmove函数的实现 #include <stdio.h> #include <string.h>void* my_memmove(void*dest, const ...
- c语言中memcpy函数_带有示例的C中的memcpy()函数
c语言中memcpy函数 memcpy()函数 (memcpy() function) memcpy() is a library function, which is declared in the ...
- c语言memcpy是什么,C语言memcpy函数的用法
介绍 memcpy是memory copy的缩写,意为内存复制,在写C语言程序的时候,我们常常会用到它.它的函原型如下: void *memcpy(void *dest, const void *sr ...
- 字符函数和字符串函数(函数介绍)
目录 1.strlen 2.strcpy 3.strcat 4.strcmp 5.strncpy 6.strncat 7.strncmp 8.strstr 9.strtok 10.strerror 1 ...
- 函数 —— strncpy() (内存重叠) memcpy() memmove() 一个字符串拷贝给另一个字符串
char *strncpy(char *dest, const char *src, size_t n) *strncpy(char *dest, const char *src, size_t n) ...
- C 中的内存操作函数-memcpy 等(to be continued)
文章目录 C中的内存操作函数 1.memcpy() 1.1 函数介绍 1.2 示例代码 1.3 Reference C中的内存操作函数 1.memcpy() 1.1 函数介绍 void *memcpy ...
- 内存拷贝函数memcpy相关解析(C语言)
memcpy方法解析 内存拷贝函数的一般用法 memcpy()函数的拷贝原理分析 以深浅拷贝为例分析memcpy的拷贝原理 用memcpy()函数与不用memcpy()函数进行拷贝数据的区分 内存拷贝 ...
最新文章
- jsp页面取整数 和Java页面取整数
- 暴雪战斗公式——除法公式的精髓
- MySQL数据库-笔记04【查询练习题*8道(附解析)】
- (2)MongoDB副本集自动故障转移原理(含客户端)
- 即时通讯软件 的无锁数组操作
- php程序员应具有的7种能力
- 5G手机产业链将带动多少A股上市公司?
- 百度又做电商;ofo 退出日本;Kotlin 1.3 正式发布 | 极客头条
- 从0到1简易区块链开发手册V0.6-实现打印区块
- SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方...
- 关于社会工程学的利用
- 国美易卡线上操作流程,国美易卡利用科技力量
- python爬虫随心所欲地爬取百度图片
- 史上最全的javascript知识点总结,浅显易懂。
- 魔兽争霸英雄属性全揭秘
- Week15 作业 A - ZJM 与霍格沃兹 HDU - 1880
- oracle数据库数据导入导出步骤
- python创建目录
- 市场分析——行业背景分析
- 日语 罗马拼音 输入法规则
热门文章
- Debian配置Apache虚拟主机(IP、端口、域名)
- php mysql三_PHP 和 MySQL 基础教程(三)_MySQL
- 周鸿祎:360的未来是什么
- 基于微信平台的在线漫画阅读小程序设计与实现【附项目源码+论文说明】分享
- 如何做一个基于python外卖点餐系统毕业设计毕设作品(Django框架)
- 【教程】使用ChatGPT制作基于Tkinter的桌面时钟
- android 背景色动画,Android利用动画实现背景逐渐变暗
- 027 大数据之Azkaban调度系统
- 关于TP5.1框架一些基础知识小结
- 如何高效地做游戏测试?