转自:http://hi.baidu.com/dongxiang2007/blog/item/7184aa114e1ca3cca6ef3f3c.html
这里总结了一部分函数:memcpy,memset,memmove,strcpy,strcat,strlen,strcmp,strncmp,strstr等函数的具体实现过程。
#ifndef NULL
#define NULL ((void *)0)
#endif
#include "stdio.h"
#include "stdlib.h"
#include
void* Mymemcpy(void *pDst, void *pSrc, size_t iLen)
{
assert((pDst!=NULL)&&(pSrc!=NULL));
void *address=pDst;
while((*((char *)pDst)++=*((char *)pSrc)++)!='/0')
NULL;
return address;
}
void* Mymemset(void *pDst, int iSet, size_t iLen)
{
assert(pDst!=NULL);
char *pTmp = (char *)pDst;
if(0 == iLen)
return pDst;
while(iLen--)
*pTmp++ = (char)iSet;
return pDst;
}
char *Mystrcpy(char *pDst,const char *pSrc) //复制字符串
{
assert((pDst!=NULL)&&(pSrc!=NULL));
char *pRst = pDst;
do
{
*pDst++ = *pSrc;
}
while(*pSrc++);
return pRst;
}
char *Mystrcat(char *pDst,const char *pSrc) //拼接字符串
{
assert((pDst!=NULL)&&(pSrc!=NULL));
char *ptemp =pDst;
for(;*pDst; ++pDst);
while((*pDst++ = *pSrc++)!= '/0');
return ptemp;
}
size_t Mystrlen(const char *pStr) //求字符串的长度
{
assert(pStr!=NULL);
size_t iLen = 0;
while(*pStr++)
iLen++;
return iLen;
}
int Mystrcmp(const char *str1,const char *str2)//比较字符串的大小
{
assert((str1!=NULL)&&(str2!=NULL));
for(; *str1 == *str2; str1++, str2++)
{
if(('/0' == *str1)||('/0' == *str2))
{
if(*str1 == *str2)
return 0;
else
break;
}
}
return ((*str1 > *str2) ? 1 : -1);
}
int Mystrncmp(const char *pStr1, const char *pStr2, int n)
{
assert((pStr1!=NULL)&&(pStr2!=NULL));
if(0 == n)
return 0;
for (; (--n > 0) && (*pStr1==*pStr2); pStr1++,pStr2++)
{
if ('/0'==*pStr1)
return 0;
}
if(*pStr1 == *pStr2)
return 0;
return ((*pStr1 > *pStr2) ? 1 : -1);
}
char *Mystrstr (const char *pStr1, const char *pStr2)//字符串匹配函数实现
{
assert((pStr1!=NULL)&&(pStr2!=NULL));
unsigned int i = 0;
if ( *pStr1 == 0 ) // 如果字符串pStr1为空
{
if ( *pStr2 ) // 如果字符串pStr2不为空
return (char*)NULL; // 则返回NULL
return (char*)pStr1; // 如筽Str2也为空,则返籶Str1
}
while ( *pStr1 ) // 串pStr1没有结束
{
i = 0;
while (1)
{
if ( pStr2[i] == 0 )
{
return (char*)pStr1;
}
if ( pStr2[i] != pStr1[i] )
break;
i++;
}
pStr1++;
}
return (char*)NULL;
}
char* Mystrstr1(char *s, char *find) //字符串匹配函数实现
{
assert((s!=NULL)&&(find!=NULL));
char c, sc;
unsigned int len;
if ((c = *find++) != 0)
{
len = Mystrlen(find);
do
{
do
{
if ((sc = *s++) == 0)
return (NULL);