字符串拷贝(strcpy 和 memcpy)

strcpy

char * strcpy ( char * destination, const char * source );

返回值:destination

memcpy

void * memcpy ( void * destination, const void * source, size_t num );

c实现(考虑到内存重叠的情况):

void* my_memcpy(void* dst, const void* src, size_t len) {
  if(dst==NULL || src==NULL) return NULL;
  if(src<dst && dst<src+len) {  //重叠,从后往前复制
    char* pdst = (char*)dst + len-1;
    char* psrc = (char*)src + len-1;
    while(len--) {
      *pdst = *psrc;
      pdst--;
      psrc--;
    }
  }
  else {  //从前往后复制
    char* pdst = (char*)dst;
    char* psrc = (char*)src;
    while(len--) {
      *pdst = *psrc;
      pdst++;
      psrc++;
    }
  }
  return dst;
}

注:可以用任意类型的指针对 void* 指针进行初始化,但把 void* 指针赋给其它类型的话,要强制类型转换,就像上面一样。

发布了35 篇原创文章 · 获赞 47 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览