(memcpy,memmove...)内存函数还不会??别怕,我来助你一臂之力
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、内存函数是什么
二、内存函数的分类(常见)
1.memcpy
memcpy的模拟实现
2.memmove
memmove的模拟实现
3.memset
模拟实现:
4.memcmp
总结
前言
在c语言的学习过程中,我们将不可避免的遇到内存函数,今天就让我们来学习一下内存函数的应用!!!
提示:以下是本篇文章正文内容,下面案例可供参考
一、内存函数是什么
内存函数是通过访问地址的方式操作对象(不必担心地址所对应的数据类型)可应用于任何类型的对象。
二、内存函数的分类(常见)
1.memcpy
void * memcpy ( void * destination, const void * source, size_t num );
- 函数memcpy从指针source开始往下拷贝num个字节的数据到destination所对应的空间
- 此函数在遇到‘\0’是不会停下,仍会自动拷贝
- 如果source和destination有所重叠,那么复制的结果都是未定义的
- memcpy函数的传参对象都是void类型,因此可以拷贝任意数据类型
memcpy的模拟实现
思路:
- 传递的执政不为NULL,所以用assert控制
- 因为不确定传递的指针个数,所以最稳妥的方法就是一个个传递,所以需要强制转化为 char*类型
- arr2的值会变化,所以要将其开始的值赋值给一个void*类型的变量,最后返回它
#include<stdio.h>
#include<assert.h>
void* my_memcpy(void* arr2, const void* arr1,size_t num)
{assert(arr2 && arr1);void* p = arr2;while (num--){*(char*)arr2 = *(char*)arr1;arr2 = (char*)arr2 + 1;arr1 = (char*)arr1 + 1;}return p;
}
2.memmove
- 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
- 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
memmove的模拟实现
思路:
- 传递的执政不为NULL,所以用assert控制
- 因为不确定传递的指针个数,所以最稳妥的方法就是一个个传递,所以需要强制转化为 char*类型
- 分类讨论,视情况而定,要用到分支语句。
void* my_memmove(void* arr2, const void* arr1, size_t num)
{assert(arr1 && arr2);void* p = arr2;if (arr2 < arr1){while (num--){*((char*)arr2 + num) = *((char*)arr1 + num);}}else{assert(arr2 && arr1);void* p = arr2;while (num--){*(char*)arr2 = *(char*)arr1;arr2 = (char*)arr2 + 1;arr1 = (char*)arr1 + 1;}}return p;
}
3.memset
void *memset(void *ptr, int value, size_t n);
ptr:指向要填充的内存块的指针。
value:要设置的值。该值以 int 形式传递,但该函数使用此值的无符号 char 转换来填充内存块
size_t:字节数,无符号整型。
与strcpy的区别是:strcpy是复制,而memset是替换!!!
模拟实现:
思路:传递的执政不为NULL,所以用assert控制
因为不确定传递的指针个数,所以最稳妥的方法就是一个个传递,所以需要强制转化为 char*类型
#include<stdio.h>
#include<assert.h>void* my_memset(void* ptr, int value, size_t num)
{assert(ptr);void* p = ptr;while (num--){*((char*)ptr) = (char) value;ptr = (char*)ptr + 1;}
}
4.memcmp
总结
内存函数的简单介绍!!!以及memcpy,memset,memmove的区别以及模拟实现
(memcpy,memmove...)内存函数还不会??别怕,我来助你一臂之力相关推荐
- 《strcmp,strcpy,memcpy,memmove等函数模拟实现》
模拟实现常见字符串函数比如:strcmp,strcpy,memcpy,memmove等函数 1.模拟实现memcpy函数 2.模拟实现memmove函数 3.模拟实现strstr函数 4.模拟实现st ...
- 从memcpy到memmove,内存函数拷贝与内存重叠问题(重点内容)
有一个关于拷贝的问题,假如有这样一个字符串 char a[]="hello"; 我需要把这个字符串拷进另一个变量中 char a1[10]; 好像方法蛮多的,比如strcpy #d ...
- 自己实现内存操作函数memset(),memcmp(),memcpy(),memmove()
1.memset()内存设置函数(初始化) void *my_memset(void* dest, int c, size_t count) { assert(dest != NULL); char ...
- C语言程序设计 | 模拟实现内存操作函数:strncpy, strncat, strncmp, memcpy, memmove
模拟实现字符串和内存操作函数(二)目录: strncpy strncat strncmp strcmp memcpy memmove strncpy char* strncpy(char* dst, ...
- c/c++内存函数(memcpy,memmove,memset,memcmp)的详解和自已实现
1.mempy指的是C和C++使用的内存拷贝函数, 函数原型为void* memcpy(void* destin, void* source, unsigned n): 函数的功能是从源内存地址的起始 ...
- memcpy,memmove,memcmp,memset内存函数
目录 memcpy内存拷贝函数 memmove函数 memcmp函数介绍 memset内存设置函数 memcpy内存拷贝函数 memcpy是内存拷贝函数,从源字符串src所指向的起始位置,拷贝到目标字 ...
- C语言函数:内存函数memmove()以及实现与使用。
C语言函数:内存函数memmove()以及实现与使用. memmove(): 头文件:#include <string.h> 函数参数: 可以发现memmove()函数的 ...
- C语言:memcpy、memmove等函数的了解,使用以及模拟实现
C语言:memcpy.memmove等函数的了解,使用以及实现 1.memcpy函数的介绍,使用,以及实现 2.memmove函数的介绍,使用,以及实现 1.memcpy函数的介绍,使用,以及实现 1 ...
- 内存函数-----Memcpy函数
memcpy函数 头文件:<string.h> 函数功能:将从源地址source开始的num个字节复制到目标地址destination处 函数参数及返回值类型:void* memcpy(v ...
最新文章
- strust2自定义interceptor的基本方法及操作
- 【Python】编程笔记4
- Python实现多行数据读入
- Spring 三种注入方式
- 中国上榜前50名富豪当中,有多少人完全是通过白手起家?
- [转]Oracle DB管理内存
- 编程语言中,差、交、并、自然连接、选择、投影、笛卡尔积分别都是什么运算...
- Numba 0.44 中文文档校对活动 | ApacheCN
- innodb 共享表空间 转 独立表空间 详细说明
- Atitit java文件监控 WatchService 的使用 目录 1. // 处理下级多层目录	1 2. // 处理新目录	1 3. Code	2 常见问题对于 1.// 处理下级多层目
- 终于解决了x64 win7上运行金山词霸的问题
- AWG标准线径规格对照表 (2
- 2018年 数据挖掘“泰迪杯” C题 第二问
- netperf测试最大连接数
- 上海理工大学HVAC综合实验室(图)
- 戴尔▪卡耐基《人性的弱点》阅读笔记(1)
- 微博SDK第三方授权登陆
- 冲刺IPO:Soul在深红市场打开的社交元宇宙
- Calander使用心得
- 动手实践,使用div盒子模型设计一个播放器效果/动手实践