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