拷贝函数如何写

今天,我来为大家讲讲拷贝函数的一些写法,以下面的函数为例:

#include <stdio.h>

#include <string.h>

void Mystrcpy1(char *str1,char *str2)//str1= str2

{

         inti;

         for(i=0;str2[i]!='\0';i++)(第一种)

         {

                   str1[i]= str2[i];

         }

 

         str1[i]= '\0';

}


把上面的数组改写成指针样式,它们之间转化关系是:arr[i]=*(arr+i),因此,可转换为以下形式

void Mystrcpy2(char *str1,char *str2)

{

         inti;

         for(i=0;*(str2+i)!='\0';i++)//p[i]== *(p+i)

         {

                   *(str1+i)= *(str2+i);

         }

 

         *(str1+i)= '\0';

}

这个函数是把for循环改写成while循环,相比较而言能简单一点

void Mystrcpy3(char *str1,char *str2)

{

         while(*str2!= '\0')(第二种)

         {

                   *str1= *str2;

                   str1++;

                   str2++;

         }

         *str1= '\0';

}

把while循环语句中的语句进行了简写

void Mystrcpy4(char *str1,char *str2)

{

         while(*str2!= '\0')(第三种)

         {

                   *str1++= *str2++;

         }

         *str1= '\0';

}

这个函数中的语句更加的简单了,但是却不容易理解,就是*str1++ = *str2++这一句,接下来,我来简单地分析一下


而语句里面的“=”是赋值的意思“++”和“*”是同级运算符,自右向左进行运算,而“str++”的意思是先运行然后再加,因此,并不影响结果。

void Mystrcpy5(char *str1,char *str2)

{

         while(*str1++= *str2++) ;(第四种)

}

 

以下的这个函数和上面的函数是一个意思,只是这是拷贝函数的正规写法

char * Mystrcpy(char *des,char *src)//des =src

{

         char*p = des;

         while(*des++ = *src++) ;

 

         returnp;

}

 

int main()

{

         charstr1[100] = "abcdef";

         charstr2[100] = "hyz";

         charstr3[100];

         charstr4[100];

         //Mystrcpy(str4,Mystrcpy(str3,str2));//链式表达

         Mystrcpy(str3,str2);

         Mystrcpy(str4,str2);

         printf("%s\n",str3);

         printf("%s\n",str4);

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值