关于字符串复制问题以及优化解决_沉浸在在代码世界的小小程序猿_新浪博客

1.先用数组的做法                                                                  
void Mystrcpy1(char *des,char *src)
{
 int i;
 for(i=0;src[i]!='\0';i++)
 {
  des[i] = src[i];
}
 des[i] = '\0';
}
2.也可以用指针的方法
void Mystrcpy2(char *des,char *src)
{
 while(*src != '\0')
 {
  *des = *src;
  src++;
  des++;
 }
 *des = '\0';
}
3.又因为中括号自带解引用的效果,即*(arr+i)==arr[i];   p[i]==*(p+i),所以指针也可以有如下方法。
void Mystrcpy3(char *des,char *src)
{
 int i;
 for(i=0;*(src+i)!='\0';i++)
 {
  *(des+i) = *(src+i);
 }
 *(des+i) = '\0';
}
4.结合2.3.方法  可以将字符串复制指针做法化简为一步渠成: while(*des++ = *src++)。即
void Mystrcpy4(char *des,char *src)
{
 while(*des++ = *src++) ;
}
5.将4进行优化,加上断言,它的作用是断定该结果一定成立,如果表达式为真则忽略,否则程序崩溃。
void Mystrcpy5(char *des,char *src)
{
 assert(des!=NULL && src!=NULL);
 if(des==NULL || src==NULL)
 {
  return ;
 }
 while(*des++ = *src++) ;
}
6.因为返回值的作用是返回的是目前字符串的首地址,所以可以再次优化,先定义一个char*p,最后返回p即可。
char *Mystrcpy6(char *des,char *src)
{
 char *p = des;
 assert(des!=NULL && src!=NULL);
 if(des==NULL || src==NULL)
 {
  return NULL;
 }
 while(*des++ = *src++) ;
 return p;
}
以目前所学知识来看,第六个是目前最好且最安全的复制字符串的做法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值