拷贝函数如何写

来源:互联网 发布:linux中yum命令 编辑:程序博客网 时间:2024/05/17 04:45

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

#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);

原创粉丝点击