C语言内存函数的应用

目录

1.memcpy()函数

2.memmove()函数

4.memcmp()函数


1.memcpy()函数

memcpy()函数是一个内存操作函数,用法就是拷贝内存中的数据,但是它可以拷贝多种类型如:字符串,浮点数,整形数组等。

它的函数声明如下:

void * memcpy ( void * destination, const void * source, size_t num );

void * destination为目标空间地址;void * source为拷贝地址,const修饰避免更改;num为无符号字节数;它的返回类型,目标空间,拷贝地址都为void*,因为void*可以接收任意类型,一但改成固定类型就只能适用于所修改的类型。

使用例子一:

这里可以看到它将arr1中的五个字符全部复制到了arr中,返回值为arr首元素地址。

使用例子二:

这里与例子1的差别在于我将num位置的五改成六,使他复制时复制了一个'\0',而打印字符串遇见'\0'就会停止导致它只打印了12345。

从这里就可以看出memcpy()函数是一个不负责任的函数,它并不会考虑你拷贝的内容是什么

注意:目标空间地址的大小需要给足,否则一旦拷贝的内容过多就会出现越界访问

使用例子三:

这里使用整形数组来拷贝,num是需要拷贝的内存大小,五个整形20个字节。这里一旦写的不是20个字节,就会出现错误,如过大导致越界访问,过小导致拷贝不完整。

使用错误例子四:

这里的使用就是内存重叠,正常输出应该是1 2 1 2 3 4 5 6 7 8 9 0;

但实际上会输出1 2 1 2 1 2 1 8 9 0;

进行拷贝时3会被拷贝成1,4会被拷贝成2,当5,6拷贝3,4的时候又会反复拷贝1,2。所以应该避免该行为。

2.memmove()函数

memmove()函数则是专门处理内存重叠的函数,它和memcpy()函数都有拷贝的能力

它的函数声明:

void * memmove ( void * destination, const void * source, size_t num );

它的参数与memcpy()函数一致,但是它可以处理内存重叠的情况。

使用方法:

可以看到打印的就是想要的结果。

注意:在使用memcpy()和memmove()时应该注意使用的条件,避免出现错误。

4.memcmp()函数

memcmp()函数是一个内存比较函数,它是以字节为单位进行比较的函数。

它的函数声明:

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

当ptr1>ptr2时返回1;ptr1<ptr2时返回-1;ptr1=ptr2时返回0;

这里的内存是小端存放,当它比较完前两个整形(8个字节)后来到第九个字节发现不相等了返回-1。


希望这篇文章能够帮助到您,谢谢您的阅读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值