C语言 内存函数

本文详细介绍了C语言中的四个内存操作函数:memcpy用于无重叠拷贝,memmove处理内存重叠,memset用于设置内存值,memcmp用于比较内存区域。着重讲解了在不同情况下如何正确使用这些函数以避免数据错误。
摘要由CSDN通过智能技术生成

一、memcpy(内存拷贝函数)

函数定义:void * memcpy ( void * destination, const void * source, size_t num );                             这里的count是整个需要拷贝的元素大小

函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置
这个函数在遇到 '\0' 的时候并不会停下来。
如果source和destination有任何的重叠,复制的结果都是未定义的
使用:

模拟实现:

二、memmove(内存重叠,内存拷贝函数)

两个没有内存重叠的两个数组进行的相互拷贝,但是在内存出现重叠的情况时,memcpy函数在某些编译器下是无法实现的,所以我们就要用到memmove函数

参数类型:void * memmove ( void * destination, const void * source, size_t num );

mommove和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的        如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理

使用:

 模拟:

注意:我们的拷贝有两种情况,第一种情况:当dest的地址小于src的地址,证明我们需要把src的内容向左拷贝,为了可以保证拷贝的成功,我们的src需要从小到大去进行拷贝

第二种情况:当dest的地址大于src的地址,我们把前面的元素向后拷贝,所以是把元素向右拷贝,这时为了保证地址重叠部分不被先行改变,所以先拷贝最后一个元素,倒着进行赋值,这样可以保证拷贝的数据准确不出错误

下图是简单说明:

三、memset函数(内存设置函数)

参数类型:void * memset ( void * ptr, int value, size_t num );

memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容
使用:

                                                                         你看这里就将前五个字符换成了‘x’

模拟:

四、memcmp函数(内存比较函数)

参数类型:int memcmp ( const void * ptr1, const void * ptr2, size_t num );

⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节

使用:

模拟:

逐一比较每一个字节所对应的地址元素是不是相等,如果相等两个指针分别加1继续推移向下一个字节进行比较,如果两个元素存在大小的差异,直接返回这两个元素对应assic差异。

如有问题,欢迎大家评论指正!

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值