本篇视图:
(1)memset
(2)memcpy
(3)memmove
(4)memcmp
(5)memchr
memset
功能:将一段内存初始化为某个值;函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。
函数原型:void *memset( void *buffer, int ch, size_t count );
代码实现:
void* MyMemset(void* bf, int ch, size_t n)
{
assert(bf);
void* ptr = bf;
while (n--)
{
*(char*)bf = ch;
bf = (char*)bf + 1;
}
return ptr;
}
memcpy
功能:函数从from中复制count 个字符到to中,并返回to指针两者重叠时,不能正常进行;
函数原型:void *memcpy( void *to, const void *from, size_t count );
代码实现:
void* MyMemcpy(void* dst, const void* src, size_t count)
{
assert(dst && src);
void *ret = dst;
while (count--)
{
*(char *)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}
memmove
功能:函数从from中复制count 个字符到to中,并返回to指针两者重叠时,依旧可以正常进行
函数原型:void *memcpy( void *to, const void *from, size_t count );
代码实现:
void MyMemove(void* dst, const void* src, size_t count)
{
assert(dst && src);
void* ret = dst;
if (dst < src || (char*)dst>(char*)src + count)
{
while (count--) //从前向后拷
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
else //从后向前拷
{
dst = (void *)(*(char*)dst + count - 1);
src = (void *)(*(char*)src + count - 1);
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
}
memcmp
功能:函数比较buffer1 和 buffer2的前count 个字符
函数原型: int memcmp( const void *buffer1, const void *buffer2, size_t count );
代码实现:
int MyMemcmp(const void* dst, const void* src, size_t size)
{
assert(dst&&src);
if (!size)
return 0;
while (size--)
{
if (*(char*)dst == *(char*)src)
{
dst = (char*)dst + 1;
src = (char*)src + 1;
}
else if (*(char*)dst > *(char*)src)
{
return (*(char*)dst - *(char*)src);
}
else
{
return (*(char*)dst - *(char*)src);
}
}
return 0;
}
memchr
功能:函数在buffer指向的数组的count个字符的字符串里查找ch 首次出现的位置,返回一个指针,指向ch 在字符串中首次出现的位置, 如果ch 没有在字符串中找到,返回NULL。
函数原型:void *memchr( const void *buffer, int ch, size_t count );
代码实现:
void* MyMemchr(const void* ptr, int ch, size_t size)
{
assert(ptr && size >= 0);
while (size && (*(char*)ptr != ch))
{
size--;
ptr = (char*)ptr + 1;
}
if (size)
{
return (void*)ptr;
}
else
{
return NULL;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)