库函数
来源:互联网 发布:刘胜军 知乎 编辑:程序博客网 时间:2024/06/05 19:09
atoiint 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; }strcpychar * 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; }