void Mystrcpy1(char *str1,char *str2)//不需要加长度int len
{
int i;
for(i=0;str2[i]!='\0';i++)//使用数组,利用数组输出函数中for循环
{str1[i]=str2[i];}
str1[i]='\0';
}
void Mystrcpy2(char *str1,char *str2)
{
int i;
for(i=0;*(str2+i)!='\0';i++)//把使用数组改为使用指针
{*(str1+i)=*(str2+i);}
*(str1+i)='\0';
}
void Mystrcpy3(char *str1,char *str2)
{
while(*str2!='\0')
{*str1=*str2;//解引用
str1++;
str2++;}
*str1='\0';
}
void Mystrcpy4(char *str1,char *str2)
{
while(*str2!='\0')
{*str1++=*str2++;}//合3为1,后置++
*str1='\0';
}
void Mystrcpy5(char *str1,char *str2)
{
while(*str1++=*str2++)//先赋值,后加加,自带\0
;//空语句
}
分析:加加
int i=10;
int j=i++;//j=10;先赋值,后++
赋值
int a=10;
if(a==100)//假
if(a=100)//真
{printf("真\n");}
if(!0)对应真 即赋值时自带'\0'
//返回值:返回目标字符串的首地址,历史遗留问题
char *Mystrcpy(char *des,char *src)//des=src 目标,源头
{
char *p=des;
while(*des++=*src++) ;//先赋值,后加加,自带'\0'
return p;
}
int main()
{
char str1[100]="abcd";
char str2[100]="xyz";
char str3[100];
str3=str1;//复制 error
//数组只能在初始化时整体赋值,之后就不可再赋值
//如何进行字符串拷贝???
首先可以使用库函数
#include<string.h>//库函数头文件
strcpy(str3,str1); 调用库函数
printf("%s\n",str3);
Mystrcpy(str3,str1);
printf("%s\n",str3);
char str4[100];
Mystrcpy(str3,str1);
Mystrcpy(str4,str1);//可读性强
//Mystrcpy(str4,Mystrcpy(str3,str1));//链式表达 高效
printf("%s\n",str3);
printf("%s\n",str4);
return 0;
}