本文来自:https://www.cnblogs.com/t427/archive/2012/11/13/2768855.html
这是比较重要的知识,看了很多真题大部分都会问到手写这些库函数的 。
strcpy
char* strcpy(char* pDest, const char* pSrc)
{
//要判断空
if(pDest==NULL || pSrc==NULL)
throw "Null Argument!";
//注意记录
char* pDestCpy = pDest;
while((*pDestCpy++ = *pSrc++)!='\0')
;
return pDest;
}
strncpy
char* strncpy(char* pDest, const char* pSrc, int size)
{
assert(pDest!=NULL && pSrc!=NULL);
assert(size>=0);
char* pDestCpy = pDest;
while(size-- && (*pDestCpy++ = *pSrc++)!='\0')
;
if(size>0)
while(size--)
*pDestCpy++='\0';
return pDest;
}
strcat
char* strcat(char* pDest, const char* pSrc)
{
assert(pDest != NULL && pSrc!=NULL);
char* pDestCpy = pDest + strlen(pDest);
while((*pDestCpy++ = *pSrc++)!='\0') ;
return pDest;
}#
strncat
char* strncat(char* pDest, char* pSrc, int size)
{
assert(pDest!=NULL && pSrc!=NULL);
assert(size>=0);
char* pDestCpy = pDest + strlen(pDest);
while(size-- && (*pDestCpy++ = *pSrc++)!='\0');
return pDest;
}
memset
void* memset(void* pDest, int value, int size)
{
assert(pDest!=NULL && size>=0);
char* pDestCpy = (char*)pDest;
while(size--)
*pDestCpy++ = value;
return pDest;
}
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;
}
memmove
void* memmove(void* dest, const void* src, int size)
{
assert(dest!=NULL && src!=NULL && size>=0);
char* pDest = (char*)dest;
char* pSrc = (char*)src;
//复制内容重叠时,从后往前复制
if(pSrc<pDest && pSrc+size>pDest)
{
pDest+=size-1;
pSrc+=size-1;
while(size--)
*pDest-- = *pSrc--;
}
else
{
while(size--)
*pDest++ = *pSrc++;
}
return dest;
}