1、
函数:memcpy
原型:void *memcpy(void *dest,void const *src,size_t length)
功能:memcpy从src的起始位置复制length个字节到dest的内存起始位置
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针
void *memcpy(void *dest, void const *src, size_t length)
{
assert(dest!=NULL && src!=NULL );
assert((dest+length<=src)||(src+length<=dest));
char *t = (char*)dest;
const char *s = (char*)src;
while (length--)
*t++ = *s++;
return dest;
}
2、
函数:memmove
原型:void *memmove(void *dest,void const *src,size_t length)
功能:由src所指内存区域复制length个字节到dest所指内存区域
说明:src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针
void *memmove(void *dest, void const *src, size_t length)
{
assert(NULL!=dest && NULL!=src);
char *t = (char*)dest;
char *s = (char*)src;
if (t <= s || t >= s + length){
while (length--)
*t++ = *s++;
}
else {
t = t + length - 1;
s = s + length - 1;
while (length--)
*t-- = *s--;
}
return dest;
}
3、
函数:memcmp
原型:int memcmp(void const *buf1,void const *buf2,size_t length)
功能:比较内存区域buf1和buf2的前length个字节
说明:这些值按照无符号字符逐字节进行比较,函数的返回类型和strcmp函数一样----负值表示a小于b,正值表示a大于b,零表示a等于b。由于这些值是根据一串无符号字节进行比较的,所以如果memcmp函数用于比较不是单字节的数据如整数或者浮点数就可能出现不可预料的结果
int memcmp(void const *buf1, void const *buf2, size_t length)
{
assert(buf1 != NULL && buf2 != NULL);
const unsigned char *t = (char*)buf1;
const unsigned char *s = (char*)buf2;
int res;
while (length--) {
if ((res = *t++ - *s++) != 0)
break;
}
return res;
}
4、
函数:memset
原型:void *memset(void *buffer,int ch,size_t length)
功能:把从buffer所指内存区域的前length个字节设置为字符ch
说明:返回指向buffer的指针
void *memset(void *buffer, int ch, size_t length)
{
assert(buffer != NULL);
char *t = (char*)buffer;
while (length--)
*t++ = ch;
return buffer;
}
5、
函数:memchr
原型:void *memchr(void const *buf,int ch,size_t length)
功能:从buf所指内存区域的前length个字节查找字符ch
说明:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL
void *_memchr(void const *buf, int ch, size_t length)
{
assert(buf!=NULL);
char *t = (char*)buf;
while (length--) {
if (*t == ch)
return t;
t++;
}
return NULL;
}
6、
函数:bcopy
原型:void bcopy(const void *src, void *dest, int n);
功能:将字符串src的前n个字节复制到dest中
说明:bcopy不检查字符串中的空字节NULL,函数没有返回值
void bcopy(const void *src, void *dest, int n)
{
char *tmp = (char*)dest;
char *s = (char*)src;
while (n--)
*tmp++ = *s++;
}
7、
函数:bcmp
原型:int bcmp(const void *s1, const void *s2, int n);
功能:比较字符串s1和s2的前n个字节是否相等
说明:如果s1=s2或n=0则返回零,否则返回非零值;bcmp不检查NULL
int bcmp(const void *s1, const void *s2, int n)
{
if (s1 == s2 || n == 0)return 0;
const char *t = (char*)s1;
char *s = (char*)s2;
do {
if (*t++ != *s++)
break;
} while (--n);
return n;
}
8、
函数:bzero
原型:void bzero(void *s, int n);
功能:置字节字符串s的前n个字节为零
说明:bzero无返回值
void bzero(void *s, int n)
{
char *t = (char*)s;
while (n--)
*t++ = 0;
}