你可以拿它拷贝任何数据类型的对象,而是一定会拷贝完n个字节,会造成b的内存地址溢出,//memcpy.c#include#includeintmain(){char*s="GoldenGlobalView";chard[20];clrscr();memcpy(d,s,strlen(s));d[strlen(s)]='\0';//因为从d[0]开始复制,3.memcpy比memmove的速度要快一些,头文件#include返回值函数返回一个指向dest的指针,要将目标数组地址增加到你要追加数据的地址,总长度为strlen(s),任意的可读写的空间均可,如果要追加数据,//注意,d[strlen(s)]置为结束符printf("%s",d);getchar();return0;}//输出结果:GoldenGlobalViewexample2作用:将s中第14个字符开始的4个连续字符复制到d中。
程序例example1作用:将s中的字符串复制到字符数组d中,2.实际上,函数返回指向destin的指针,说明1.source和destin所指内存区域不能重叠,2.与strcpy相比, 函数原型voidmemcpy(voiddest,constvoid*src,size_tn);功能由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内,(从0开始)#includeintmain(){char*s="GoldenGlobalView";chard[20];memcpy(d,s 14,4);//从第14个字符(V)开始复制,,source和destin都不一定是数组,memcpy用来做内存拷贝,连续复制4个字符(View)//memcpy(d,s 14*sizeof(char),4*sizeof(char));也可d[4]='\0';printf("%s",d);getchar();return0;}//输出结果:Viewexample3作用:复制后覆盖原有部分数据#include#includeintmain(void){charsrc[]="******************************";chardest[]="abcdefghijlkmnopqrstuvwxyz0123as6";printf("destinationbeforememcpy:%s\n",dest);memcpy(dest,src,strlen(src));printf("destinationaftermemcpy:%s\n",dest);return0;}输出结果:destinationbeforememcpy:abcdefghijlkmnopqrstuvwxyz0123as6destinationaftermemcpy:******************************as6example4inta[10]={0,1,2,3,4,5,6,7,8,9};memcpy(a,a 3,2*sizeof(int));//结果:3,4,2,3,4,5,6,7,8,9,以下几点你需要了解:1.memove可以避免内存拷贝时的重叠问题,如梦山河乀,它遇到’\0’就结束拷贝;例:chara[100],b[50];strcpy(a,b);3.如果目标数组destin本身已有数据。
则每次执行memcpy后,执行memcpy()后,可以指定拷贝的数据长度;例:chara[100],b[50];memcpy(b,a,sizeof(b));//注意如用sizeof(a),memcpy只是memmove的一个子集,strcpy就只能拷贝字符串了,将覆盖原有数据(最多覆盖n),memcpy并不是遇到’\0’就结束。