字符串拷貝(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* 指針賦給其它類型的話,要強制類型轉換,就像上面一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章