编程实现strcpy和memcpy函数

来源:互联网 发布:淘宝名字叫什么好 编辑:程序博客网 时间:2024/06/06 03:45

首先需要了解strcpy与memcpy的区别:

(1)两者复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组,整型,结构体,类等

(2)复制的方法不同。strcpy不需要指定长度,它是遇到字符串结束符‘\0’而结束的。memcpy则是根据其第三个参数决定复制长度的。

(3)用途不同。通常在复制字符串时用strcpy;而若需要复制其他类型的数据,则一般用memcpy


已知strcpy函数的原型是:

char*strcpy(char* strDest,const char* strSrc) ;

下面是编程实现strcpy函数的例子:

#include <stdio.h>char *strcpy(char* strDest ,const char*strSrc)   //实现strSrc到strDest的复制{if((strDest == NULL)||(strSrc == NULL)  //判断参数strDest和strSrc的有效性{return NULL ;}char *strDestcopy = strDest ;  //保存目标字符串的首地址while((*strDest++ = *strSrc++) != '\0') ; //把strSrc字符串内容复制到strDest下return strDestcopy ;}int getStrlen(const char *strDest)  //实现获取strSrc字符串的长度{int len = 0 ; //保存长度while(*strDest++ != '\0')  //循环直到遇见结束符'\0'为止{len++ ;}return len ;}int main(){char strSrc[] = "Hello World" ;   //要被复制的源字符串char strDest[20] ;              //要复制到目的字符数组int len = 0 ;                   //保存目的字符数组中字符串的长度len = getStrlen(strcpy(strDest,strSrc)) ;  //链式表达式,先复制后计算长度printf("strDest:%s\n",strDest) ;printf("Length of strDest:%d\n",len) ;return 0 ;}

下面是编程实现memcpy函数的实例:

#include <stdio.h>void *memcpy2(void * memTo ,const void * memFrom,size_t size)   {assert((memTo != NULL)&&(memFrom != NULL)) ; //memTo和memFrom必须有效char * tempFrom = (char*)memFrom ;  //保存memFrom首地址char * tempTo = (char *)memTo ;   //保存memTo首地址while(size-->0)  //循环size次,复制memFrom的值到memTo中{*tempTo++ = *tempFrom++ ;}return memTo ;}int main(){char strSrc[] = "Hello World!" ;   //将被复制的字符数组char strDest[20] ;memcpy2(strDest,strSrc,4) ;  //复制strSrc的前4个字符到strDest中strDest[4] = '\0' ;  //把strDest的第五个元素赋为结束符'\0'printf("strDest:%s\n",strDest) ;return 0 ;}

与strcpy不同,memcpy以参数size决定复制多少个字符(strcpy是遇见结束符‘\0’结束)。由于在主程序中只复制了strSrc的前4个字符,所以最后还应加上'\0'结束符


0 0
原创粉丝点击