追逐梦想的猪

人生因为有梦想而精彩!

导航

关于strcpy()与memcpy()比较

在使用这两个函数中,平时大多都使用strcpy()而忽略了memcpy(),它们都是从缓冲区拷贝内容。

byte a[4];// 每一个字节赋数值类型
 a[0]=0;
 a[1]=1;
 a[2]=0;
 a[3]=1;

 byte c1[4];
 memcpy(c1, a, sizeof(byte)*4);
 byte c2[4];
 strcpy((char*)(byte*)c2, (char*)(byte*)a);

只有memcpy()处理的是正确的,所以拿来它们的函数原型比较一下:

char *strcpy( char *strDest, const char *strSource);

void *memcpy( void *dest, const void *src, size_t count );

可以看出 strncpy() 是处理的字符串(遇零结束),memcpy()是处理一个缓冲区(void*类型的),而我们的内容中有数字0,而数字0又是字符串的结尾字符 ' \0' 的数字表现,字符串拷贝是遇到0就结束,所以,如果要拷贝的缓冲区如果是非字符串那么就尽量用memcpy(),这样可以避免出错的可能。
-------------------------------------------------------------------------
void *memcpy(void *pvTo, const void *pvFrom, size_t size)
{
 assert((pvTo != NULL) && (pvFrom != NULL)); // 使用断言
 byte *pbTo = (byte *) pvTo; // 防止改变pvTo 的地址
 byte *pbFrom = (byte *) pvFrom; // 防止改变pvFrom 的地址
 
 while(size -- > 0 )
  *pbTo ++ = *pbFrom ++ ;
 
 return pvTo;
  
}


char *strcpy(char  *strDest, const char  *strSrc)
{
  assert((strDest != NULL) && (strSrc != NULL));
 
 char *address = strDest;
 while ((*strDest++ = *strSrc++) != '')
  continue;
  
 return address;

posted on 2006-11-06 12:10  Ann  阅读(1007)  评论(0编辑  收藏  举报