关于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(),这样可以避免出错的可能。