今天,我来为大家讲讲拷贝函数的一些写法,以下面的函数为例:
#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);