#includevoid *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("%sn",stu); return 0; }
对于这个函数的注意事项:
1.strcpy函数只能拷贝字符串,而memcpy函数可以拷贝任意类型,例如字符数组、整型、结构体、类等;
2.与strcpy相比,memcpy遇到’’不结束,而且一定会复制完n个字节。只要保证src开始有n字节的有效数据,dest开始有n字节内存空间就行。
3.转成char *类型是为了我们一个字节一个字节的拷贝;
4.dest=(char *)dest+1;写成这样是,不写成dest=(char *)dest++;是因为++的优先级比较高;
5.memcpy函数也不保证拷贝是否重叠,我们这里是拷贝了5个字节到数组stu,对于后面的对于字节部分照样打印出来。
void*说明c语言中很多库函数实现都使用的void *,为什么?
内存标识:起始地址 +步长,void* 最大的好处是:没有指定指针指向的内存空间的数据类型,可指向(处理)任意数据类型——万能指针类型。只要有了起始地址,就可按最小步长——字节来处理任意内存空间。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)