memcpy函数的实现
2024-09-04 03:08:26
1.按1个字节拷贝
(1)不要直接使用形参,要转换成char*
(2)目标地址要实现保存
(3)要考虑源和目标内存重叠的情况
void * mymemcpy(void *dest, const void *src, size_t count)
{
if (dest == NULL || src == NULL)
return NULL;
char *pdest = static_cast <char*>(dest);
const char *psrc = static_cast <const char*>(psrc);
int n = count;
if (pdest > psrc && pdest < psrc+count)
{
for (size_t i=n-1; i != -1; --i)
{
pdest[i] = psrc[i];
}
}
else
{
for (size_t i= 0; i < n; i++)
{
pdest[i] = psrc[i];
}
}
return dest;
}
2.按4个字节拷贝
(1)转成int*,按照每次4个字节来拷贝,不足四个字节的按一个字节拷贝
void *mymemcpy(void *dst,const void *src,size_t num)
{
assert((dst!=NULL)&&(src!=NULL));
int wordnum = num/4;//计算有多少个32位,按4字节拷贝
int slice = num%4;//剩余的按字节拷贝
int * pintsrc = (int *)src;
int * pintdst = (int *)dst;
while(wordnum--)*pintdst++ = *pintsrc++;
while (slice--)*((char *)pintdst++) =*((char *)pintsrc++);
return dst;
}
一个伟大公司的机会
最新文章
- String Aop 动态代理例子
- Effective Java 57 Use exceptions only for exceptional conditions
- java foreach 循环原理
- acdream.18.KIDx&#39;s Triangle(数学推导)
- phpcms站---去除域名绑定目录中的HTML
- (WPF) MVVM: ComboBox Binding, XML 序列化
- Ubuntu 下一个可用的音乐播放器
- MVC入门教程-视图中的Layout使用
- BNU 4067 求圆并
- ** poj Y2K Accounting Bug 2586
- MVC — 第 6 天
- 历年NOIP选题题解汇总
- 每日冲刺报告——Day3(Java-Team)
- 在Mac上使用vs-code快速上手c语言学习(入门文,老鸟退散)
- docker 中打包部署Springboot项目
- ASP.NET MVC - 发布web应用程序、部署到IIS
- hql里面union和union all的区别
- 第一次php之旅
- vue async/await同步 案例
- 【单调队列】BZOJ1342-[Baltic2007]Sound静音问题