char * strcpy(char* dest, const char * src)
{
assert(src && dest);
while((*dest++ = *src++) != '\0');
return dest;
}
memcopy 不考虑源内存和目标内存之间的重叠, 逐字节地拷贝, 代码比较简单, 和strcpy类似,
void my_memcopy(void *src, void *dst, int size)
{
char *psrc, *pdst;
psrc = (char *)src;
pdst = (char *)dst;
while (size--) {
*pdst++ = *psrc++;
}
}
http://kenby.iteye.com/blog/1409973
memmov考虑内存重叠的情况,可以分四种情况
src, dest之间有足够的空间,也就是|src-dest|>size
dest在高地址,src在低地址
src在高地址,dest在低地址
前三种情况都从低地址往高地址拷贝,最后一种反过来,可以保证拷贝结果正确,但是src可能不能和以前一样。
void my_memmove(void *src, void *dst, int size)
{
char *psrc, *pdst;
psrc = (char *)src;
pdst = (char *)dst;
if (pdst < psrc || (pdst - psrc) > size) {//pdst<psrc包含了两种情况
while (size--) {
*pdst++ = *psrc++;
}
} else {
psrc = psrc + size - 1;
pdst = pdst + size - 1;
while (size--) {
*pdst-- = *psrc--;
}
}
}