


https://legacy.cplusplus.com/reference/cstring/memcpy/?kw=memcpy
memcpy这个函数作用:
从source指向的位置开始复制num个字节的数据到destination指向的内存中。
有一点需要注意,这个函数遇到'\0'是不会停止复制的,你让复制多少个字节,他就复制多少个字节。
下面是这个函数使用的一个例子:

memcpy的模拟:
我们可以参照cplusplus官方memcpy函数的格式进行模拟。
如下:

这个函数的模拟并不难,不过多讲解。
当我们了解了memcpy函数后,我们来思考下这个问题?
如果dest与src有重叠,我们模拟的memcpy函数还能起作用吗? 答案是不能。
事实上,当destination和source发生重叠时,使用memcpy函数拷贝的结果是未定义的。
此时我们就会使用系统自带的memmove函数,这个函数是专门解决空间重叠的情况。
(在vs2022中,memcpy是可以实现重叠拷贝的,但不能保证所有的memcpy都可以。)
下面介绍memmove函数:



https://legacy.cplusplus.com/reference/cstring/memmove/?kw=memmove这个函数的作用跟memcpy函数相似,只不过是专门解决重叠拷贝的情况。
使用例子:

memmove函数的模拟:

当dest <= src时,我们采取顺序打印(以src的视角)不然重叠的部分会被覆盖。

当dest > src时,我们采取逆序打印。




https://legacy.cplusplus.com/reference/cstring/memcmp/?kw=memcmp注意,这里要比较的字节数是最多比较字节数。当前几次的比较已经出现结果,函数就不会继续比较下去了。
使用例子:



memcmp的模拟:



这个函数是用来设置内存的的,以字节为单位。
从ptr指向的内存块的前num个字节设置为指定值。
使用例子:


memset的模拟:

写完了,拜拜,下期再见😏
摸鱼摸鱼😴✨🎞
