strcpy函数
http://www.cnblogs.com/chenyg32/p/3739564.html
char * strcpy(char* dst, const char *src) { assert(dst!=NULL && src != NULL); char *res = dst; while((*dst++ = *src++)!='\0'); return res; }
重点笔记:
1. src 使用 const 修饰,保护原变量;
2. 参数判空,保护程序;
3. 返回目标字符串地址;
4. 谨记字符串末尾的结束符 '\0';
5. 考虑内存重叠??????
内存重叠的拷贝函数:
char *strcpy(char *dst, const char*src) { assert(dst!=NULL && src!=NULL); char *ret = dst; my_memcpy(dst, src, strlen(src)+1);//重点:一定要长度+1,拷贝进去'\0' return ret; } char * my_memcpy(char *dst, const char* src, int cnt) { assert(dst!=NULL && src != NULL && cnt>0); char * ret = dst; if (dst>=src && dst<=src+cnt-1) { dst = dst+cnt-1; src = src+cnt-1; while(cnt--) { *dst-- = *src--; } } else { while(cnt--) *dst++ = *src++; } return ret; }
首先检测是否有重叠区域,若有的话从后往前赋值内容;否则正常从前往后赋值内容;
特别注意的是,当调用上述 my_memcpy 接口时谨记传入的字符串长度要包括末尾的'\0'字符