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

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);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值