实现自己的strcpy和memcpy

来源:互联网 发布:centos 6.8 搭建lnmp 编辑:程序博客网 时间:2024/05/22 13:41

实现自己的strcpy和memcpy

(1)实现自己的strcpy

strcpy 函数提供了字符串复制。即strcpy只用于字符串复制,
并且它不仅复制字符串的内容,还会复制字符串的结束符。
strcpy函数原型是: char* strcpy(char *strDest,const char *strSrc);


代码如下:

#include <stdio.h>#include <iostream>using namespace std;char *MyStrcpy(char *strDest,const char *strSrc){if((strDest==NULL) || (strSrc==NULL)){return NULL;}char *strDestCopy=strDest;while((*strDest++=*strSrc++)!='\0');//后置++优先级高于*,前置++优先级同*return strDestCopy;}int getStrLen(const char *strSrc){int len=0;if (strSrc==NULL){return 0;}while(*strSrc++!='\0'){len++;}return len;}int main(){char strSrc[]="Hello World!";char strDest[20];int len=0;cout<<strSrc<<endl;//printf("strSrc: %s\n",strSrc);len=getStrLen(MyStrcpy(strDest,strSrc));//链式表达式printf("strDest: %s\n",strDest);printf("Len: %d\n",len); return 0;}
(2)实现自己的memcpy
memcpy提供了一般的内存复制。即memcpy对于复制的内容没有限制,其用途更加广泛


代码如下:

#include <stdio.h>#include <assert.h>void* MyMemcpy(void *memTo,const void *memFrom,size_t size){assert((memTo!=NULL)&&(memFrom!=NULL));char *tempFrom=(char*)memFrom;char *tempTo=(char*)memTo;while(size-->0){*tempTo++=*tempFrom++;}return memTo;}int main(){char strSrc[]="Hello World!";char strDest[20];MyMemcpy(strDest,strSrc,4);//将strSrc中的前四个字符复制到strDest中strDest[4]='\0';//将strDest中的第五个字符设置为\0;printf("strDest: %s\n",strDest)return 0;}


2、strcpy和memcpy的区别:


(1) 复制的内容不同:strcpy只复制字符串,而memcpy可以复制任意内容,例如:字符数组
整形、结构体、类等。
(2) 复制的方法不同:strcpy不需要指定长度,它遇到字符串结束符“\0”便结束。
memcpy则是根据其第三个参数决定复制的长度。
(3) 用途不同:通常在复制字符串时用strcpy,而需要复制其他类型数据时则
一般用memcpy。










原创粉丝点击