關于strcpy()與memcpy()比較
舉例:
{
byte a[4];// 每一個字節賦數值類型
byte c1[4];
byte c2[4];
memcpy(c1, a, sizeof(byte)*4); //正確使用
strcpy((char*)(byte*)c2, (char*)(byte*)a);//錯誤調用
}
函數原型
strcpy
extern char *strcpy(char *dest,char *src);
#include <string.h>
功能:把src所指由NULL結束的字符串復制到dest所指的數組中
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回指向dest的指針
memcpy
extern void *memcpy(void *dest,void *src,unsigned int count);
#include <string.h>
功能:由src所指內存區域復制count個字符串到dest所指內存區域.
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針.函數原型
關于memcpy的用法
作用:在dest處拷貝src處的字節,并以count來計算需要拷貝的字節數量,進行內存的拷貝。
參數: dest:新的存貯區的開始部位 src:需要拷貝的開始部位 count:需要拷貝的字節數備注:dest,src,它們都是從各自的地址處進行寫入,如果是p而不是&p,那么獎會取得p的值(地址),在該值的地址處進行讀出或寫入。
例:
int* intPoint = new int(3333);
int* intPoint1;
//在intPoint1的地址處寫入intPoint地址處的值,也就是intPoint指針值。
memcpy( &intPoint1, &intPoint, 4 );
//使intPoint1指向了intPoint. 或 int* intPoint = new int(3333);
cout << *intPoint1 << endl;
可以看出 strcpy() 是處理的字符串(遇零結束),memcpy() 是處理一個緩沖區(void*類型的),而我們的內容中有數字0,而數字0又是字符串的結尾字符 ' \0' 的數字表現,字符串拷貝是遇到0就結束,所以,如果要拷貝的緩沖區如果是非字符串那么就盡量用memcpy(),這樣可以避免出錯的可能。