標籤: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後,要將目標數組地址增加到你要追加資料的地址。