概述
memcpy原型
void* (void* dest,const void* src,size_t len)
为什么是void呢?,因为memcpy支持任何匀速类型的拷贝,所以给成void类型,然后在进行强制类型转化即可达到任意类型的拷贝。
这同样也是strcpy和memcpy的一个差别,这里mempy是对内存进行操作的所以无论你是什么类型,都可以对其进行操作。
memcpy模拟实现
void *my_memcpy(void *det, const void *src, int num)
{
char *p1 = (char *)det;
char *p2 = (char *)src;
char *ret = p1;
while (num)
{
*p1 = *p2;
p1++;
p2++;
}
return ret;
}
memmove函数原型
void* memmove(void *dst, const void *src, size_t count)
memcpy函数没有处理内存重叠的情况,所以引出了memmove函数来处理这个情况
memmove函数模拟实现
void* m_memmove(void* dest, const void* src, size_t len)
{
assert(dest);
assert(src);
char* d = (char*)dest;
char* s = (char*)src;
char* res = d;
if (d > s && d < s + len)
{
d = d + len;
s = s + len;
while (len--)
{
*d-- = *s--;
}
}
else
{
while (*d++ = *s++)
{
;
}
}
return res;
}
memset函数原型
void *memset(void *s, int ch, size_t n);
功能:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
突出优点:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
void* m_memset(void* src, int n, size_t len)
{
int* s = (int*)src;
int* temp = s;
while (len--)
{
*s++ = n;
}
return temp;
}
memcmp函数原型
int memcmp(void* dest, const void* src,size_t len)
memcmp函数实现
int m_memcmp(void* dest, const void* src,size_t len)
{
assert(dest);
assert(src);
char* d = (char*)dest;
char* s = (char*)src;
while (len--)
{
if (*d == *s)
{
d++;
s++;
}
else
{
if (*d > *s)
return 1;
else
return -1;
}
}
return 0;
}
最后
以上就是香蕉苗条为你收集整理的【C语言】模拟实现memcpy、memmove、memset函数的全部内容,希望文章能够帮你解决【C语言】模拟实现memcpy、memmove、memset函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复