码迷,mamicode.com
首页 > 其他好文 > 详细

实现 memcpy 函数

时间:2014-06-07 04:35:21      阅读:551      评论:0      收藏:0      [点我收藏+]

标签:c   class   blog   code   a   color   

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 = (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

实现 memcpy 函数,布布扣,bubuko.com

实现 memcpy 函数

标签:c   class   blog   code   a   color   

原文地址:http://www.cnblogs.com/zhouzhuo/p/3755970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!