今年阿里实习面试时,面试官叫我写出内存拷贝函数:
void copy(char *dst,char *src,size_t count)
{
while(count--)
*dst++=*src++;
}
认为很简单,就写了以上形式,特定问了面试官数据类型......以上代码很多考虑不够完善,全面
// memcpy.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<assert.h>
#include<iostream>
using namespace std;
//内存拷贝函数
void *MemoryMove(void *dst,const void *src,size_t count)
{
assert(dst); //判断是否为空
assert(src);
void *ret=dst;
if((dst<src)||((char *)dst>(char *)src+count-1)) //从低端地址开始复制
{
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
}
else
{
dst=(char *)dst+count-1; //找到目标高端地址
src=(char *)src+count-1; //找到原高端地址
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst-1;
src=(char *)src-1;
}
}
return ret;
}
void copy(char *dst,char *src,size_t count)
{
while(count--)
*dst++=*src++;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *s1="Company!";
char s2[]="";
MemoryMove(s2,s1,strlen(s1)+1);
cout<<s2<<endl;
return 0;
}
Day thinking博客里讲解比较详细.http://blog.csdn.net/sszgg2006/article/details/7989404