zoukankan      html  css  js  c++  java
  • 实现 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

  • 相关阅读:
    题目
    先贤祠3
    先贤祠2
    先贤祠1
    论文他引次数及ESI高被引论文查询方法
    [唐诗]古风(其三十一)-李白
    [唐诗]古风(其二十四)-李白
    [唐诗]古风(其十九)-李白
    [唐诗]古风(其十五)-李白
    [唐诗]古风(其三)-李白
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3755970.html
Copyright © 2011-2022 走看看