实现 memcpy 函数
memcpy() 的解释:
void* memcpy(void* dst, const void* src, size_t n);
// if copying takes place between objects that overlap, the behavior is undefined.
因此自己动手实现 memcpy()时需要考虑地址重叠的情况。
另外,标准库也提供了地址重叠时的内存拷贝函数:memmove(), memmove()把源字符串拷贝到临时buf 里,然后再从临时 buf 里写到目的地址。
memcpy 的问题
void* memcpy(void* dst, void* src, size_t size) {
char* psrc;
char* pdst;
if(NULL == dst || NULL == src) {
return NULL;
}
if(src < dst && (char*)src + size > (char*) dst) {
psrc = (char*) src + size - 1;
pdst = (char*) dst + size - 1;
while(size--) {
*pdst-- = *psrc--;
}
} else {
psrc = (char*) src;
pdst = (char*) dst;
while(size--) {
*pdst++ = *psrc++;
}
}
return dst;
}
B公司面试第一道题
1. 没能考虑到 src, dst 重复的情况
2. strlen 的参数只能是 char*
3. 对 (void*) 这种东西,不能用 src[0] 而应该是 *src, *dst

浙公网安备 33010602011771号