一、前言
- 上期我们讲解了与字符相关的函数:
- 其中就有strcmp()字符串比较函数;strcpy()字符串拷贝函数;他们都能对内存进行一定的操作,可是却无法处理一些非字符串的数据。
- 而这里我将介绍这四个函数:分别是memcpy();memmove();memset();memcmp()。
二、内存函数
1.memcpy
- **函数声明:**void *memcpy( void * dest , const void * src , size_t count );
- **函数功能:**将stc指向的空间数据,连续拷贝count个字节的大小到指针dest所指向的对象中,并会返回一个dest所指向空间的起始位置。(dest与str的空间有重叠的时候,其函数的行为是未定义的)
- 模拟实现:
- 效果展示:
2.memmove
-
**函数声明:**void *memmove( void * dest , const void * src , size_t count );
-
**函数功能:**将stc指向的空间数据,连续拷贝count个字节的大小到指针dest所指向的对象中,并会返回一个dest所指向空间的起始位置。(专门用来处理dest与str的空间有重叠的情况)
-
模拟思想:
-
模拟实现:
void* my_memmove(void* dest, void* sour, size_t num) { assert(dest && sour); void* ret = dest; if (dest < sour) { while (num--) { *(char*)dest = *(char*)sour; ((char*)dest)++; ((char*)sour)++; } } else { while (num--) ((char*)dest)[num] = ((char*)sour)[num]; } return ret; }
-
效果展示:
3.memset
- **函数声明:**void *memset( void * dest , int c , size_t count );
- **函数功能:**将dest所指向的空间,以字节为单位拷贝为c的数据内容,总计拷贝count个。
- **模拟实现:**memset实现简单,和memcpy很相似。
- 效果展示:
4.memcmp
- **函数声明:**int memcmp( const void * buf1 , const void * buf2 , size_t count );
- **函数功能:**将buf1指向的空间,与buf2指向的空间,以字节为单位,依次比较,若前者较大,返回>0的数字,若相后者较大,返回<0的数字,若比较了count个字节后,都是相等,则返回数字0;其中count为最多拷贝字节数。
- **模拟实现:**与strncmp实现相似,需要注意类型转换的情况。
- 效果展示:(切记,我的机器上是小端字节序存储方式)