库函数

atoi
int atoi(const char *str) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        assert(str!=NULL);
        
        while(isspace(*str)) str++;
        int sig=1;
        if(*str=='-') sig=-1;
        if(*str=='+' || *str=='-') str++;
        int num=0;
        while(isdigit(*str)){
            int digit=*str-'0';
            if(INT_MAX/10<num || INT_MAX-digit<num*10)
                return sig==-1?INT_MIN:INT_MAX;
                num=num*10+digit;
                str++;
        }
        return sig*num;
    }

strcpy
char * strcpy( char *strDest, const char *strSrc )      
{     
    if(strDest == strSrc) { return strDest; }  
    assert( (strDest != NULL) && (strSrc != NULL) );     
    char *address = strDest;      
    while( (*strDest++ = * strSrc++) != '\0' );      
    return address;     
} 

//Copies characters between buffers.
//
// 函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。
//           与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束
//           memcpy功能和memmove相同,但是memcpy中dest和source中的区域不能重叠,否则会出现未知结果。
//
// 返回值说明:返回指向dest的void *指针
// 附加说明: 指针src和dest所指的内存区域不可重叠
//
void *memcpy(void *dest, const void *src, size_t count)
{
 assert( (dest!=NULL)&&(src!=NULL) );
 char *tmp_dest = (char*)dest;
 char *tmp_src = (char*)src;
 while( count--)//不对是否存在重叠区域进行判断
  *tmp_dest++ = *tmp_src++;
 return dest;
}

//要处理src和dest有重叠的情况,不是从尾巴开始移动就没问题了。   
//一种情况是dest小于src有重叠,这个时候要从头开始移动,   
//另一种是dest大于src有重叠,这个时候要从尾开始移动。   
void *memmove(void *dest, const void *src, unsigned int count)   
{  
    assert(dest != NULL && src != NULL);  
    char* pdest = (char*) dest;  
    char* psrc = (char*) src;  
      
    //pdest在psrc后面,且两者距离小于count时,从尾部开始移动. 其他情况从头部开始移动   
    if (pdest > psrc && pdest - psrc < count)   
    {  
        while (count--)   
        {  
            *(pdest + count) = *(psrc + count);  
        }  
    } else   
    {  
        while (count--)   
        {  
            *pdest++ = *psrc++;  
        }  
    }  
    return dest;  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值