zoukankan      html  css  js  c++  java
  • 关于strcpy和memcpy

    strcpy和memcpy都是标准C库函数,它们有下面的特点。


    strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
    已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);


    memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
    void *memcpy( void *dest, const void *src, size_t count );

    代码如下:

    char * strcpy(char * dest, const char * src) // 实现src到dest的复制
    {
      if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性
      {
          return NULL;
      }
      char *strdest = dest; //保存目标字符串的首地址
      while ((*strDest++ = *strSrc++)!=''); //把src字符串的内容复制到dest下
      return strdest;
    }
    void *memcpy(void *memTo, const void *memFrom, size_t size)
    {
      if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效
    return NULL;
      char *tempFrom = (char *)memFrom; //保存memFrom首地址
      char *tempTo = (char *)memTo; //保存memTo首地址
      while(size -- > 0) //循环size次,复制memFrom的值到memTo中
      *tempTo++ = *tempFrom++ ;
      return memTo;
    }
    strcpy和memcpy主要有以下3方面的区别:
    1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
    2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符""才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
    3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

    例如 char strl[10],str2[]={"QWERT"};
    strcpy(str1,str2);
    运行后是str1由{}变为{QWERT}

    运行后是str1由{}变为{QWERT}

    注意:
    str1的长度必须大于str2,目的是有足够的空间容纳str2的东西;

    又如:

    char str1[100]="BCD";
    char str2[100]="AAAAAAAA";
    int i=0;
    for(i=1;i<=4;i++)
    {
    memcpy(str2,str1,i);
    printf("%s ",str2);
    }

    输出结果:

    BAAAAAAA
    BCAAAAAA
    BCDAAAAA
    BCD

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    网页设计中颜色的搭配
    CSS HACK:全面兼容IE6/IE7/IE8/FF的CSS HACK
    UVa 1326 Jurassic Remains
    UVa 10340 All in All
    UVa 673 Parentheses Balance
    UVa 442 Matrix Chain Multiplication
    UVa 10970 Big Chocolate
    UVa 679 Dropping Balls
    UVa 133 The Dole Queue
  • 原文地址:https://www.cnblogs.com/leeplogs/p/5866674.html
Copyright © 2011-2022 走看看