您的位置:首页 > 编程语言

strcpy函数和memcpy函数的实现代码

2012-09-29 10:13 232 查看
 ***********************/
  char *strcpy(char *strDestination, const char *strSource)
  {
  assert(strDestination && strSource);
  char *strD=strDestination;
  while ((*strDestination++=*strSource++)!='\0');
  NULL;
  return strD;
  }



memcpy是内存复制函数
原型:
void * memcpy(void *dest, void const *src, unsigned int length);
功能:从src的起始位置复制length个字节到dst的内存起始位置。你可以用这种
方法复制任何类型的值,第3个参数指定复制值的长度(以字节计)。
如果src和dst以任何形式出现了重叠,它的结果是未定义的。

void  memcpy(   void   *  dest,   void   *  src   ,   size_t  n)
{
      char     far  *   pd   =  (char   far   *  )dest;
      char     far  *   ps   =  (char   far   *  )src;
      long   len  =   (long)sizeof(size_t)   *   n;
 
      for(   long  i=0;   i <n;   ++i  )
            *pd++   =   *ps++;
}


strcpy

原型声明:extern char *strcpy(char *dest,char *src);

  头文件:string.h

  功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

  说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

  返回指向dest的指针。

/**********************

  * C语言标准库函数strcpy的一种典型的工业级的最简实现

  * 返回值:

  * 返回目标串的地址。

  * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通常为NULL。

  * 参数:

  * strDeatination

  * 目标串

  * strSource

  * 源串

1.source和destin所指内存区域不能重叠,函数返回指向destin的指针

  2.strcpy和memcpy主要有以下3方面的区别。

  2.1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

  2.2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

  2.3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

  3.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。

  //注意,source和destin都不一定是数组,任意的可读写的空间均可。---wk
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: