#include<iostream>
using namespace std;
//实现,未考虑内存重叠情况
void* memcpy1(void * desc, const void * src, size_t size)
{
if (desc == NULL && src == NULL)
{
return NULL;
}
unsigned char* desc1 = (unsigned char*)desc; //将void*转成unsigned char*类型
unsigned char* src1 = (unsigned char*)src; //将void*转成unsigned char*类型
while (size-->0)
{
*desc1++ = *src1++;
}
return desc;
}
//考虑内存重叠的情况
void* memcpy2(void* desc, const void * src, size_t size)
{
if(desc == NULL && src == NULL)
{
return NULL;
}
unsigned char* desc1 = (unsigned char*)desc;
unsigned char* src1 = (unsigned char*)src;
//当内存重叠时,从后往前复制
if(desc > src && desc1 < (src1 + size))//内存发生重叠
{
for (int i = size - 1; i >= 0; i--)
{
*desc1++ = *src1++;
}
}
else
{
for (int i = 0; i < size; i++)
{
*desc1++ = *src1++;
}
}
return desc;
}
//memset内部实现memset(void*s,int ch,size_t n)
void * memset1(void * ptr, int value, size_t n)
{
if (ptr == NULL && n < 0)
{
cout << "赋值出现错误" << endl;
return;
}
char *s = (char*)ptr; //定义一个指针来接str;辅助指针
while (n--)
{
*s++ = (char)value;
}
return ptr;
}
下面就是根据源码而来的memset实现:
void* memset(void* dst,int val, size_t count)
{
void* ret = dst;
while(count--)
{
*(char*)dst = (char)val;
dst = (char*)dst + ;
}
return ret;
}