關(guān)于strcpy()與memcpy()比較
舉例:
{
byte a[4];// 每一個(gè)字節(jié)賦數(shù)值類型
byte c1[4];
byte c2[4];
memcpy(c1, a, sizeof(byte)*4); //正確使用
strcpy((char*)(byte*)c2, (char*)(byte*)a);//錯(cuò)誤調(diào)用
}
函數(shù)原型
strcpy
extern char *strcpy(char *dest,char *src);
#include <string.h>
功能:把src所指由NULL結(jié)束的字符串復(fù)制到dest所指的數(shù)組中
說(shuō)明:src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。
返回指向dest的指針
memcpy
extern void *memcpy(void *dest,void *src,unsigned int count);
#include <string.h>
功能:由src所指內(nèi)存區(qū)域復(fù)制count個(gè)字符串到dest所指內(nèi)存區(qū)域.
說(shuō)明:src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針.函數(shù)原型
關(guān)于memcpy的用法
作用:在dest處拷貝src處的字節(jié),并以count來(lái)計(jì)算需要拷貝的字節(jié)數(shù)量,進(jìn)行內(nèi)存的拷貝。
參數(shù): dest:新的存貯區(qū)的開始部位 src:需要拷貝的開始部位 count:需要拷貝的字節(jié)數(shù)備注:dest,src,它們都是從各自的地址處進(jìn)行寫入,如果是p而不是&p,那么獎(jiǎng)會(huì)取得p的值(地址),在該值的地址處進(jìn)行讀出或?qū)懭搿?/span>
例:
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() 是處理的字符串(遇零結(jié)束),memcpy() 是處理一個(gè)緩沖區(qū)(void*類型的),而我們的內(nèi)容中有數(shù)字0,而數(shù)字0又是字符串的結(jié)尾字符 ' \0' 的數(shù)字表現(xiàn),字符串拷貝是遇到0就結(jié)束,所以,如果要拷貝的緩沖區(qū)如果是非字符串那么就盡量用memcpy(),這樣可以避免出錯(cuò)的可能。