1. memcpy 使⽤和模拟实现
函数原型:void * memcpy ( void * destination, const void * source, size_t num );
功能:
函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位
置。
使用时需要包含<string.h>
注意:
1.该函数与strcpy类似,不过strcpy只能复制字符串,memcpy不局限于字符串,对于任意类型的数据都能复制。
2.这个函数在遇到
'\0'
的时候并不会停下来,一直将num个字节复制完全,而strcpy遇到'\0'时停下。
3.如果source和destination有任何的重叠,复制的结果都是未定义的,即对于自身复制时会出现问题,此时应该使用memmove。
使用案例:
对于memcpy的模拟实现:
2. memmove 使⽤和模拟实现
函数原型:void * memmove ( void * destination, const void * source, size_t num );
功能:memmove的功能和memcpy基本相同,但memmove更强大,适用的范围更广,和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。如果源空间和⽬标空间出现重叠,就得使⽤memmove函数处理。
使用时需要包含<string.h>
使用案例:
源空间和⽬标空间出现重叠,使用memcpy和memmove的结果不同,因为memcpy执行过程中会把source的内容改变,进而影响之后的复制,在这种时候就得使⽤memmove函数处理。
memmove的模拟实现
3. memcmp 函数的使用和模拟实现
函数原型:int memcmp ( const void * ptr1, const void * ptr2, size_t num );
功能:⽐较从ptr1和ptr2指针指向的位置开始,一直向后的num个字节。该函数与strcmp类似,不过strcmp只能比较字符串,memcmp不局限于字符串,对于任意类型的数据都能比较.。
使用时需要包含<string.h>
使用案例以及实现: