memcpy的正确写法
来源:互联网 发布:最好的网络收音机软件 编辑:程序博客网 时间:2024/04/28 03:24
最近老师叫我们写个内存拷贝函数 即memcpy
上网查了一下
基本上都是如下的答案:
void *(void *dest, const void *src, unsigned int n)
{
char *Dest = (char*)dest;
char *Src = (char*)src;
while(n- -)
{
*Dest ++ = *Src++;
}
return dest;
}
上述拷贝是不考虑内存拷贝时发生重合的写法,也就是自己给自己拷贝
#include<stdio.h>
#include<memory.h>
void main()
{
char a[5] = "Love";
memcpy(a + 1,a ,5)
printf("%s/n",a);
}
如果按上述拷贝得出的结果是LLLLL
而库函数得出的结果是LLove
显然上述答案有问题
于是又了下面的做法:
void *memcpy(void *dest, const void *src ,unsigned int n)
{
char *Dest = (char*)dest;
char*Src = (char*)src;
if (Dest <= Src || Dest >= Src + n) //判断内存拷贝区域不重合的情况
{
while(n - - )
{
*Dest++ = *Src++;
}
}
else
{
Dest = Dest +(n - 1);
Src = Src + (n - 1);
while(n- -)
{
*Dest - - = *Src - -;
}
}
return dest;
}
这才是内存拷贝函数memcpy的正确写法!!!!!
- memcpy的正确写法
- memcpy(),strcpy(),strcat()的正确写法
- 身份证复印件的正确写法
- PayPal的正确写法
- Handler的正确写法
- hint的正确写法
- 网页版权的正确写法
- 人民币大写的正确写法
- <c:if 的正确写法
- wait()-notify()的正确写法
- cstring类的正确写法
- 二分查找的正确写法
- 正确的JQuery.ajax写法
- 正确的单例写法
- ios注释的正确写法
- C\C++的main()的正确写法
- 关于Comparable的compareTo的正确写法
- Cacls无需确认的正确写法
- 动态联编
- 一切皆由坚持(《我是一只IT小小鸟》书评)
- 第一步
- 如何成为一名 Google 软件工程师?
- 希望在这的学习中交更多的朋友和老师!
- memcpy的正确写法
- csdn好
- 大家好
- API控件
- 线性表∈纯表(树)∈再入表∈递归表 。可见,广义表是对线性表和树的推广。
- Windows7下IIS7的安装及ASP配置方法
- 无准备,不编程——计算机达人成长之路(15)连载
- 转个念头看世界
- 新手