1、不调用库函数实现strcpy()
char *strcpy(char *strDest,const char *strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char *pstrDest=strDest;
while((*strDest++=*strSrc++)!='\0');
return pstrDest;
}
2、不调用库函数实现memcpy()
void* memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTo!=NULL)&&(pvFrom!=NULL));
unsigned char* pbTo=(unsigned char*)pvTo;
unsigned char* pbFrom =(unsigned char*)pvFrom;
while(size-->0)
{
*pbTo++=*pbFrom++;
}
return pbTo;
}
3、不调用库函数实现strncpy()
char *strncpy(char *strDest,const char *strSrc,size_t size)
{
assert((dst!=NULL)&&(str!=NULL));
char* pstrDest=strDest;
int i=0;
while(((*strDest++=*strSrc++)!='\0')&&(i++)<size);
*(pstrDest+size)='\0';
return pstrDest;
}
4、不调用库函数实现strcat()
char *strcat(char *strDest,const char *strSrc)
{
assert(strSrc!=NULL);
char* pstrDest=strDest;
while(*strDest++!='\0');
strDest--;
while((*strDest++=*strSrc)!='\0');
return pstrDest;
}
5、不调用库函数实现strncat()
char* strncat(char* strDest,char* strSrc,int size)
{
assert(strDest!=NULL&&strSrc!=NULL);
assert(size>=0);
char* pstrDest=strDest + strlen(strDest);
while(size-- && (*pstrDest++=*pstrSrc++)!='\0');
return strDest;
}
6、不调用库函数实现memset()
void* memset(void* strDest, int value, int size)
{
assert(strDest!=NULL && size>=0);
char* pstrDest = (char*)strDest;
while(size--)
*pstrDest++ = value;
return strDestt;
}
7、不调用库函数实现memcpy()
void* memcpy(void* pDest, const void* pSrc, int size)
{
assert(pDest!=NULL && pSrc!=NULL && size>=0);
char* pDestCpy = NULL;
char* pSrcCpy = NULL;
//要复制的内存有重叠时,从后往前复制
if(pSrc<pDest && (char*)pSrc+size>(char*)pDest)
{
pDestCpy = (char*)pDest+size-1;
pSrcCpy = (char*)pSrc+size-1;
while(size--)
*pDestCpy-- = *pSrcCpy--;
}
else
{
pDestCpy = (char*)pDest;
pSrcCpy = (char*)pSrc;
while(size--)
*pDestCpy++ = *pSrcCpy++;
}
return pDest;
}
8、不调用库函数实现strcmp()
int strcmp(char* strDest,char* strSrc)
{
assert((strDest!=NULL)&&(strSrc!=NULL));
char* pstrDest=strDest;
char* pstrSrc =strSrc;
while(*pstrDest && *pstrSrc && (*pstrDest==*pstrSrc))
{
pstrDest++;
pstrSrc++;
}
return (*pstrDest-*pstrSrc);
}