目录
四个函数的头文件都是#include<string.h>
一.memcpy(内存拷贝)
我们可以从下面的链接查到关于memcpy函数的具体介绍https://legacy.cplusplus.com/reference/cstring/memcpy/?kw=memcpy
memcpy这个函数作用:
从source指向的位置开始复制num个字节的数据到destination指向的内存中。
有一点需要注意,这个函数遇到'\0'是不会停止复制的,你让复制多少个字节,他就复制多少个字节。
下面是这个函数使用的一个例子:
memcpy的模拟:
我们可以参照cplusplus官方memcpy函数的格式进行模拟。
如下:
这个函数的模拟并不难,不过多讲解。
二.memmove(内存移动)
当我们了解了memcpy函数后,我们来思考下这个问题?
如果dest与src有重叠,我们模拟的memcpy函数还能起作用吗?
答案是不能。
事实上,当destination和source发生重叠时,使用memcpy函数拷贝的结果是未定义的。
此时我们就会使用系统自带的memmove函数,这个函数是专门解决空间重叠的情况。
(在vs2022中,memcpy是可以实现重叠拷贝的,但不能保证所有的memcpy都可以。)
下面介绍memmove函数:
memmove函数介绍https://legacy.cplusplus.com/reference/cstring/memmove/?kw=memmove这个函数的作用跟memcpy函数相似,只不过是专门解决重叠拷贝的情况。
使用例子:
memmove函数的模拟:
当dest <= src时,我们采取顺序打印(以src的视角)不然重叠的部分会被覆盖。
当dest > src时,我们采取逆序打印。
三.memcmp(内存比较)
memcmp函数介绍https://legacy.cplusplus.com/reference/cstring/memcmp/?kw=memcmp注意,这里要比较的字节数是最多比较字节数。当前几次的比较已经出现结果,函数就不会继续比较下去了。
使用例子:
memcmp的模拟:
四.memset(内存设置)
这个函数是用来设置内存的的,以字节为单位。
从ptr指向的内存块的前num个字节设置为指定值。
使用例子:
memset的模拟:
写完了,拜拜,下期再见😏
摸鱼摸鱼😴✨🎞