#include<stdio.h>
void *Memcpy(void *dest,const void *src,size_t count)
{
void *ret=dest;
if(dest==NULL||src==NULL) return NULL;
while(count--)
{
*(char *)dest=*(char *)src;
dest=(char *)dest+1;
src=(char *)src+1;
}
return ret;
}
int main(void)
{
char buf[]="111111111111111";
char stu[]="2722273";
Memcpy(stu,buf,5); //从buf复制5个字节的数据到stu中
printf("%s\n",stu);
return 0;
}
对于这个函数的注意事项:
1.strcpy函数只能拷贝字符串,而memcpy函数可以拷贝任意类型,例如字符数组、整型、结构体、类等;
2.与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节。只要保证src开始有n字节的有效数据,dest开始有n字节内存空间就行。
3.转成char *类型是为了我们一个字节一个字节的拷贝;
4.dest=(char *)dest+1;写成这样是,不写成dest=(char *)dest++;是因为++的优先级比较高;
5.memcpy函数也不保证拷贝是否重叠,我们这里是拷贝了5个字节到数组stu,对于后面的对于字节部分照样打印出来。
void*说明
c语言中很多库函数实现都使用的void *,为什么?