strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。要求:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
该图为strcpy英文介绍:
 

当然也要区别下不同的编译器,可能处理执行有差异。
strcpy函数原型1
 char * strcpy(char *a,char *b)
 { while((*(a++)=*(b++))!=0);return a;}
strcpy函数原型2
 char *strcpy(char *strDest, const char *strSrc);//strDest为目标,strSrc为源
 {
      assert((strDest!=NULL) && (strSrc !=NULL)); //如果两个为空则不用复制,直接中止
      char *address = strDest;       //用address指向strDest开始地址
      while( (*strDest++ = * strSrc++) != ‘\0’ ) //复制,直到源串结束;
         NULL ; //空操作
      return address ;    //返回strDest开始地址                       
      }
 }//就这个算法看来是多余.
Char* 类型的返回值,可以实现链式表达式。
Exp:int length = strlen(strcpy(strdest,”Hello World”));
strlen函数的意思是测试字符串的字符长度,不含字符串结束标志的。
 sizeof是个运算符,它的结果是字符串在内存中的所占字节大小,它要把\0算进去的。
strcpy只是复制字符串,但不限制复制的数量。很容易造成缓冲溢出,也就是说,不过dest有没有足够的空间来容纳src的字符串,它都会把src指向的字符串全部复制到从dest开始的内存,
int _tmain(int argc, _TCHAR* argv[])
 {
    char *s = "Golden Global View";
    char c1[5];
    char c2[5];
    char c3[5];
    memset(c1,0,sizeof(c1));
    memset(c2, 0, sizeof(c1));
    memset(c3, 0, sizeof(c1));
    strcpy(c1, s);
    printf("%s", c1);
    printf("%c", c2[0]);
    printf("%c", c3[0]);
    getchar();
    return 0;
 }
可见,strcpy 同 printf以结束符判断结果。 同时栈溢出,有的编译器的话,溢出导致修改邻居地址存储的数据,导致产生预料不到的问题。
总结,使用strcpy,注重考虑结束符的问题!










