網頁

2006年2月20日 星期一

memcpy 跟strcpy 用法上的差別

strcpy()只能透過零結尾來判定結束,所以有以下的缺點:
1. 速度慢,因為只能以BYTE為單位執行拷貝。
2. 容易出現overlay/memory-corruption,這有兩個情況,一個是目標緩衝區太小了,另一個是來源忘了零結尾。
3. 重疊的情況時,拷貝會出錯。
char *strcpy( char *strDestination, const char *strSource )

把 strSource copy 到strDestination
因為C 的字串結束是用 0 所以. strcpy 作法是把strSource 中的資料一個一個設定strDestination 一直到0
程式大概是這樣子

while( (*strSource) != 0 )
{
*strDestination =*strSource;
++strDestination;
++strSource;
};
*strDestination=0;

void *memcpy( void *dest, const void *src, size_t count );
把src copy 到dest . 一共copy count 個byte
注意 count 個byte 是一定要給的.
程式大概是這樣寫的
const unsigned char *pSrc=src;
unsigned char *pDest=dest;
for( size_t i=0 ; i < count ; ++i,++pSrc,++pDest)
*pDest=*pSrc;

沒有留言:

張貼留言