首页 > 代码库 > 实现 memcpy 函数
实现 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 的问题
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 = http://www.mamicode.com/( char *) src + size - 1; pdst = ( char *) dst + size - 1; while (size--) { *pdst-- = *psrc--; } } else { psrc = http://www.mamicode.com/( char *) src; pdst = ( char *) dst; while (size--) { *pdst++ = *psrc++; } } return dst; } |
B公司面试第一道题
1. 没能考虑到 src, dst 重复的情况
2. strlen 的参数只能是 char*
3. 对 (void*) 这种东西,不能用 src[0] 而应该是 *src, *dst
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。