mem***系列函数
内存操作函数:
memcpy
menmove
memset
memcmp
一、memcpy – #include<string.h>
void * memcpy ( void * destination, const void * source, size_t num )
- 任意类型字符拷贝,将num个字节的值从source指向的位置直接复制到destination指向的存储块;
- 函数遇到’ \0 '不会自动停止;
模拟实现
void *memcpy(void *dest, const void *src, size_t count)
{void *ret = dest;assert(dest);assert(src);while (count--) {*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}
int main()
{char dest[32] = "xbsjabcj";char src[32] = "safdjkbfsj";int count = 5;printf("%s\n", memcpy(dest, src, count));system("pause");return 0;
}
运行结果
二、memmove – #include<string.h>
void * memmove ( void * destination, const void * source, size_t num )
- 移动内存块、将num个字节的值从source指向的位置复制到destination指向的存储块。复制就像使用中间缓冲区一样进行,从而允许目标和源重叠;
分析:
内存拷贝会产生三种常见情况:
第一种: 需要使用从前向后拷贝
第二种:不论如何拷贝都不会发生内存重叠问题
第三种:需要采用从后向前拷贝
模拟实现
void *memmove(void *dest, const void *src, size_t count)
{void *ret = dest;if (dest <= src || (char*)dest >= ((char*)src + count)) {while (count--) {*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else {dest = (char*)dest + count - 1;src = (char*)src + count - 1;while (count--) {*(char*)dest = *(char*)src;dest = (char*)dest - 1;src = (char*)src - 1;}}return ret;
}
int main()
{char dest[32] = "xbsjabcj";char src[32] = "safdjkbfsj";int count = 5;printf("%s\n", memmove(dest, src, count));system("pause");return 0;
}
三、memset – #include<string.h>
void * memset ( void * ptr, int value, size_t num )
- 填充内存块、将ptr指向的内存块的前num个字节设置为指定值(解释为unsigned char)
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };memset(arr, 0, 10); //10 ----- 表示 10 个字节,即将 arr 数组起始的 10 个字节空间内容设置为0 return 0;
}
四、memcmp – #include<string.h>
int memcmp ( const void * ptr1, const void * ptr2, size_t num )
- 比较两个内存块
int main()
{int arr1[] = { 1,2,3,4,5 };int arr2[] = { 1,2,3,3,3 };int ret = memcmp(arr1, arr2, 12);//此处比较两个内存空间的 12 个字节内容,即 1,2,3 故 ret=0printf("ret = %d\n", ret);return 0;
}
详细代码可参考本人 GitHub 链接:
https://github.com/Coderxingchild/C-/blob/master/内存操作函数/内存操作函数/mem_.c
(博客内容为原创,有任何问题可以私聊)
mem***系列函数相关推荐
- Mem系列函数介绍及案例实现
昨天导师甩给我们一个项目案例,让我们自己去看一看熟悉一下项目内容,我看到了这个项目里面大量使用memset(sBuf,0,sizeof(sBuf));这一块内存填充的代码,于是回想起以前查过Mem ...
- mem系列函数使用总结
mem系列函数是我们在平时写C++的过程中经常会用到的函数,现在写一篇博客来总结一下它们的用法.mem系列函数主要是用来操作内存,使用这些函数需要在源文件中包含头文件cstring. memset 函 ...
- mem系列函数(memcpy)
看了好多面经之后,我发现有很多题目都似乎很简单,但是如果要自己写的话,总感觉能写出个大概,但好像差点什么,所以我打算把见过的面试题总结出来,方便以后复习. memcpy 下面是我们常见的的错误写法: ...
- C++ mem系列函数
void* memcpy( void *dest, const void *src, size_t count ); 拷贝内存区域 [src, src+count) 到内存区域 [dest, dest ...
- Str库系列函数合集(strlen、strcpy、strcmp、strcat、strchr等)
关于Str函数,网上五花八门,使初学者很容易迷失方向,笔者在这里做一个常用函数的总结.希望对读者起到些许帮助. 后续会持续更新特殊函数~ 想了解mem系列函数的,请猛戳这里→mem系列函数 代码 // ...
- mem库系列函数合集(memset、memchr、memcmp、memcpy)
关于Mem函数,网上五花八门,使初学者很容易迷失方向,笔者在这里做一个常用函数的总结.希望对读者起到些许帮助. 想了解Str系列函数的,请猛戳这里→Str系列函数大全 代码 //头文件:#includ ...
- platform_device_系列函数及其设备注册的作用
platform_device_系列函数,实际上是注册了一个叫platform的虚拟总线.使用约定是如果一个不属于任何总线的设备,例如蓝牙,串口等设备,都需要挂在这个虚拟总线上. driver/bas ...
- windows线程同步-原子操作-Interlocked系列函数(用户模式)
Interlocked系列函数用来保证原子访问. InterlockedExchangeAdd提供保证long类型的原子操作. InterlockedExchangeAdd64提供long long ...
- 浅析php curl_multi_*系列函数进行批量http请求
何起: 一系列 数量很大 数据不热 还希望被蜘蛛大量抓取的页面,在蜘蛛抓取高峰时,响应时间会被拉得很高. 前人做了这样一个事儿:页面分3块,用3个内部接口提供,入口文件用curl_multi_*系列函 ...
最新文章
- 二十世纪最伟大的10大算法
- javaScriptDay01
- taskscheduler java_java – 针对不同任务的不同taskScheduler
- 超声声场模拟_超声全聚焦(TFM)简介
- 轻松上云系列之二:其他云数据迁移至阿里云
- java spring hiberate_Spring+SpringMVC+Hibernate整合实例讲解
- 【To Understand】动态规划:求最长公共子串/最长公共子序列
- openSUSE Tumbleweed 支持 Linux Kernel 4.20
- 深度学习中常用的数据集
- Fabric环境配置
- 土方工程量计算表格excel_市政道路土方excel计算表(含公式)
- 如何在项目中规范git commit格式
- 为RK3399,树莓派等开发板安装安卓、Linux等系统
- PUBWIN密码攻防战 打造永攻不破的密码!(转)
- 华硕 ASUS D540MC 台式计算机,华硕商用D540MC台式电脑增强校园硬实力
- Kubernetes切换Docker容器引擎为Containerd
- Python 每日一记217根据词频生成词云图
- U盘启动制作Ventoy v1.0.87
- 批量启动docer容器shell脚本
- ubuntu16.04成功安装 百度网盘 by deepin-wine-for-ubuntu
热门文章
- 傅里叶光学(二)一维光栅与二维光栅的夫琅禾费衍射
- Can't find bundle for base name XXXX, locale zh_CN解决方法
- Iverilog 源码分析 -- VPI的实现
- 谁能告诉我怎么获得C币鸭
- 区块链的商业价值 区块链技术开发公司哪家好
- 一个Vue页面的内存泄露分析
- 2021年中国民爆行业企业经营情况及主要产品产销量分析:工业雷管、工业炸药产销量均有所下滑[图]
- ANSYS谱分析的概念、过程及关键点解析
- Archlinux 命令行模式-安装 BIOS 非 UEFI(实装笔记)
- 自然语言处理笔记11-哈工大 关毅