memcpy()函數

來源:互聯網
上載者:User

標籤:des   class   blog   code   http   ext   

1.memcpy()函數的實現

void *memcpy(void *dest, const void *src, size_t n);

從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中

void* memcpy(void* dest, const void* source, size_t count){      char *ret = (char *)dest;      char *dest_t = ret;//中間變數      char *source_t = (char *)source;//中間變數      while (count--)      {           *dest_t++ = *source_t++;      }        return ret;}  

有上述代碼可知:由於採用中間變數,memcpy執行完之後目的地址和源地址都不變,並且返回目的地址

 

2.strcpy()函數的實現

原型聲明:extern char *strcpy(char* dest, const char *src);

標頭檔:#include <string.h>

功能:把從src地址開始且含有NULL結束符的字串複製到以dest開始的地址空間

說明:src和dest所指記憶體地區不可以重疊且dest必須有足夠的空間來容納src的字串。

返回指向dest的指標。

char *strcpy(char *strDestination,const char *strSource){    assert(strDestination!=NULL && strSource!=NULL);    char *strD=strDestination;    while ((*strD++=*strSource++)!=‘\0‘);    return strDestination;}

 

3.memcpy函數的用法與strcpy的區別

不同點:

1.複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元數組、整型、結構體、類等。

2.複製的方法不同。strcpy不需要指定長度,它遇到被複製字元的串結束符"\0"才結束,所以容易溢出。memcpy

   則是根據其第3個參數決定複製的長度。

3.用途不同。通常在複製字串時用strcpy,而需要複製其他類型資料時則一般用memcpy

如果目標數組destin本身已有資料,執行memcpy()後,將覆蓋原有資料(最多覆蓋n)。如果要追加資料,則每

次執行memcpy後,要將目標數組地址增加到你要追加資料的地址。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.