strcpy函数编写分析

来源:互联网 发布:vscode lua 编辑:程序博客网 时间:2024/05/17 18:26

复制字符串

 1 #include<stdio.h>
  2 #include<string.h>
  3 char *strcpy(char *strDest,const char *strSrc)
  4 {
  5     if((strDest == NULL) || (strSrc == NULL))                                                          
  6         return NULL;
  7     char *strDestCopy = strDest; //保存字符串的首地址
  8     while((*strDest++ = *strSrc++) != '\0');
  9     return strDestCopy;
 10 }
 11
 12 int main()
 13 {
 14     char strSrc[] = "hello world ";
 15     char strDest[20];
 16     int len =0;
 17     len = strlen(strcpy(strDest,strSrc));//链式表达式,先复制,后计算长度
 18     printf("strDest :%s\n",strDest);
 19     printf("strSrc:%s\n",strSrc);
 20 }

其实说实话,在编写strcpy这个函数,我们主要理解一句代码就ok了!


while((*strDest++ = *strSrc++) != '\0');

这句代码我们分开来看:

while(*strSrc!='/0')
{
*strDest=*strStr;
strDest++;
strStr++;
}
*strDest=*strSrc;


通常一个问题就来了:

为什么strcpy函数要返回char* 类型呢?

这是为了能使用链式表达式。由于在strcpy中使用了char *返回类型,因此之间可以使用len = strlen(strcpy(strDest,strSrc));//链式表达式,先复制,后计算长度这种方法来同时做两个操作。

那是什么叫做链式表达式呢?为什么要用链式表达式呢?

就是方便一些,否则就要这样写:

char strDest[12];

strcpy( strDest, “hello world”);

int length = strlen(strDest);

什么链式就是一连串写下来的意思。。。

如果上面的字符串拷贝函数strcopy的返回值是void,那么,上面那句:

 int length = strlen( strcpy( strDest, “hello world”) );

,写成好几句了:

char strDest[12];

 strcpy( strDest, “hello world”);

int length = strlen(strDest);

而这种直接返回char *的手段,就是为了后来函数调用者方便而设计的.不用你这么麻烦用上述方法去使用了,而直接可以使用拷贝后的dest字符串了.这种方便的实现方法,看起来就是链子链在一起的,所以称为 链式表达式


0 0