您的位置:首页 > 编程语言 > C语言/C++

C语言字符串相关库函数的实现strcpy、memcpy、strncpy、strcat、strncpy、memset、memcpy、strcpy

2014-03-28 00:19 741 查看
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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐