自实现strcpy函数

来源:互联网 发布:win10 知乎 编辑:程序博客网 时间:2024/06/04 19:45

int MyStrlen(const char * pStr){int iCount = 0;while (*(pStr+iCount) != '\0'){iCount = iCount + 1;}return iCount;}

void * MyStrcpy(char * const pDest,const char * pSrc){char *pDestTemp = pDest;int iLoop = 0;int iLength = 0;if (NULL == pDest || NULL == pSrc){return pDest;}iLength = MyStrlen(pSrc);/*判断是用于处理源字符串和目标字符串是同一个字符串的情况*/if (pDest<=pSrc || pDest >= pSrc + iLength){for(iLoop=0;iLoop<=iLength;iLoop++){*(pDestTemp+iLoop) = *(pSrc+iLoop);}}else{pDestTemp = pDestTemp + iLength;pSrc = pSrc + iLength;while (iLength >= 0){*(pDestTemp--) = *(pSrc--);iLength = iLength - 1;}}return pDest;}

输入的第一个参数是用于返回拷贝后的字符串的,所以字符串指针地址不能变;

第二个参数,是源字符串,所以不能更改值。

MyStrcpy(strSrc+3,strSrc);MyStrcpy(strSrc,strSrc+3);

逻辑判断就是为了处理上面这两种调用。

可实际系统的strcpy函数,对这种调用处理结果是很不确定的。


这是Ubuntu下执行的结果;


这是Windows下Visual Studio 2008执行的效果。

执行的函数都是MyStrcpy(strSrc+3,strSrc);

让人很是不解。




0 0
原创粉丝点击