当前位置: 首页 > article >正文

【C语言】内存函数~

一、前言

  • 上期我们讲解了与字符相关的函数:
  • 其中就有strcmp()字符串比较函数;strcpy()字符串拷贝函数;他们都能对内存进行一定的操作,可是却无法处理一些非字符串的数据
  • 而这里我将介绍这四个函数:分别是memcpy();memmove();memset();memcmp()

二、内存函数

1.memcpy
  • 函数声明:void *memcpy( void *dest, const void *src, size_t count );
  • 函数功能:将stc指向的空间数据,连续拷贝count个字节的大小到指针dest所指向的对象中,并会返回一个dest所指向空间的起始位置。(dest与str的空间有重叠的时候,其函数的行为是未定义的
  • 模拟实现:
  • 效果展示:
2.memmove
  • 函数声明:void *memmove( void *dest, const void *src, size_t count );
  • 函数功能:将stc指向的空间数据,连续拷贝count个字节的大小到指针dest所指向的对象中,并会返回一个dest所指向空间的起始位置。(专门用来处理dest与str的空间有重叠的情况
  • 模拟思想:
  • 模拟实现:
    void* my_memmove(void* dest, void* sour, size_t num)
    {
    	assert(dest && sour);
    	void* ret = dest;
    	if (dest < sour)
    	{
    		while (num--)
    		{
    			*(char*)dest = *(char*)sour;
    			((char*)dest)++;
    			((char*)sour)++;
    		}
    	}
    	else
    	{
    		while (num--)
    			((char*)dest)[num] = ((char*)sour)[num];
    	}	
    	return ret;
    }
  • 效果展示:
3.memset
  • 函数声明:void *memset( void *dest, int c, size_t count );
  • 函数功能:将dest所指向的空间,以字节为单位拷贝为c的数据内容,总计拷贝count个。
  • 模拟实现:memset实现简单,和memcpy很相似。
  • 效果展示:
4.memcmp
  • 函数声明:int memcmp( const void *buf1, const void *buf2, size_t count );
  • 函数功能:将buf1指向的空间,与buf2指向的空间,以字节为单位,依次比较,若前者较大,返回>0的数字,若相后者较大,返回<0的数字,若比较了count个字节后,都是相等,则返回数字0;其中count为最多拷贝字节数。
  • 模拟实现:与strncmp实现相似,需要注意类型转换的情况。
  • 效果展示:(切记,我的机器上是小端字节序存储方式)

http://www.kler.cn/a/272331.html

相关文章:

  • 深入探索Python人脸识别技术:从原理到实践
  • 多层 RNN原理以及实现
  • 语音技术在播客领域的应用(2)
  • AUTOSAR从入门到精通-自动驾驶测试技术(二)
  • boss直聘 __zp_stoken__ 分析
  • Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决
  • vb.net+zxing.net随机彩色二维码、条形码
  • 【学习笔记】云原生的关键技术初步
  • Puppet 代码入门:清单和模块
  • 2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享
  • 【Java初阶(一)】初识Java
  • 测试人员Bug书写规范
  • 【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉树剪枝
  • 24计算机考研调剂 | 武汉科技大学
  • 安全架构设计
  • 静默安装OGG21.3微服务版本FOR ORACLE版本
  • [java基础揉碎]断点调试
  • 多核(CPU)系统中并行计算Atomic原子操作与缓存一致性(memory/cache coherency)
  • C++/CLI学习笔记5(快速打通c++与c#相互调用的桥梁)
  • Linux基础开发工具之yum与vim
  • golang常用库之-golang常用库之-ladon包 | 基于策略的访问控制
  • C++ 接口的实现,及作用通俗理解方式
  • DevOps 环境预测测试中的机器学习
  • MySQL主从数据库简单搭建
  • 谈谈对数据库索引的认识
  • 高可用的机房监控运维管理系统,实时把握机房脉搏