关于内存函数的认识和自己的理解

本文详细介绍了C语言中的内存函数如memcpy、memmove、memcmp、memset以及string库函数如strcat、strcpy和strncpy的原理、功能和注意事项。重点讲解了它们在处理内存拷贝、比较和字符串操作时的区别与应用场景。
摘要由CSDN通过智能技术生成

大家好,这节课我们讲一下关于内存函数带大家系统的学习一波内存函数哦。。
@内存函数
#一、memcpy
功能演示:参数类型必须是void*。因为memcpy函数是内存拷贝函数,它必须什么类型都能接收。
#二、memmove
功能实现:如果源空间和目标空间出现重叠,就得使用memmove函数处理。
#三、memcmp
功能实现:比较两个内存块,将 ptr1 所指向的内存块的前 num 个字节与 ptr2 指向的前num字节数进行比较, 返回不同意义的值。
#四、memset()
功能实现:将 ptr 所指向的内存块的前num个字节数设置为指定值。
内存函数可在任意类型使用,字符串函数只能比较字符串,内存函数不关注’\0’, 只关注要拷贝的字节数。
#四 其他一些函数

一:memcpy函数
函数原型:void * memcpy ( void * destination, const void * source, size_t num )
函数功能:参数类型必须是void*。因为memcpy函数是内存拷贝函数,它必须什么类型都能接收。
函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置,这个函数在遇到 ‘\0’ 的时候并不会停下来。
在这里插入图片描述
模拟现实memcpy函数
void 类型不能进行解引用操作和++运算,在解引用操作和++运算之前,要进行强制类型转换。并且因为此函数是一个字节一个字节的拷贝,所以要将ptr1和ptr2变量强制类型转化为char*类型
目标变量dest的地址需要存放在一个临时指针变量中,因为dest在循环体中一直是变化的
将dest和sour指针变量assert断言,使其不为NULL。并且因为sour是不能改变的,所以用const修饰,以保护起来。
在这里插入图片描述
在这里插入图片描述
memcpy不支持自身内部拷贝,可能存在覆盖,主要负责拷贝两块独立空间中的数据,重叠内存拷贝使用memmove。
二:memove函数
函数原型void * memmove ( void * destination, const void * source, size_t num )
它和memcpy函数的功能一样,只是如果源空间和目标空间出现重叠,就得用memove函数处理
在这里插入图片描述
为避免出现空间重叠现象,根据dest 和 sour 的位置分情况处理,选择从前向后或从后向前拷贝。
在这里插入图片描述
在这里插入图片描述
模拟实现memmove函数
在这里插入图片描述
三:memcmp函数
函数原型:int memcmp ( const void * ptr1, const void * ptr2, size_t num )
功能实现:比较两个内存块,将 ptr1 所指向的内存块的前 num 个字节与 ptr2 指向的前num字节数进行比较, 返回不同意义的值。
在这里插入图片描述
在这里插入图片描述
模拟实现memcmp函数
在这里插入图片描述
四:memset函数
函数原型void * memset ( void * ptr, int value, size_t num )
功能实现:复制字符c(一个无符号字符)到参数str所指向的字符串的前n个字符。
在这里插入图片描述
模拟实现memset
在这里插入图片描述
四:其他函数
这里讲下string库函数里的一些函数
1,strcat函数
函数原型char *strcat( char * destination, const char * source );
函数功能,实现追加功能
注意方面
第一源字符串和目标字符串都必须以’\0’结束。
第二目标空间必须足够大,能容纳下源字符串的内容

在这里插入图片描述
第三目标空间必须可修改,比如当我们拷贝的目标空间是一个常量字符不可改变,这时候编译环境就会崩溃。这个单独举个列子说明一下。
在这里插入图片描述
strcat函数模拟实现:
在这里插入图片描述
strncat函数
函数原型char * strncat(char * dst, const char * src, size_t n);
函数功能把一定数量的字符串拷贝到对应字符串后面
strncat函数
在这里插入图片描述
模拟实现
在这里插入图片描述

,2,strcpy函数
函数原型:char* strcpy(char* destination,const char* source);
函数功能:与memcpy函数的功能相同,只是strcpy函数只能拷贝字符串。
在这里插入图片描述
函数strcpy的注意方面。
1.源字符必须以 '\0’结束:
2.目标空间必须足够大,以确保能放源字符串
3.目标空间必须可变。
strcpy函数模拟实现
在这里插入图片描述
3, strncpy函数
函数原型char * strncpy(char * dest, const char * src, size_t n)
函数功能:拷贝一定数量的字符串。与strcpy相比,它只是多了能够控制拷贝任意数量的字符串。
strcpy函数实现
在这里插入图片描述

strncpy函数模拟实现
在这里插入图片描述
这就是今天所有关于内存函数的知识了,衷心祝愿大家能学好C语言。
时人不识凌云木,直待凌云识道高。加油!!
期待我的下一篇博客哦!!!!!!

  • 32
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值