strcpy函数编写分析

复制字符串

 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字符串了.这种方便的实现方法,看起来就是链子链在一起的,所以称为 链式表达式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值