自定义函数对两个字符串赋值,逐步优化
#include <stdio.h>
void my_strcopy (char* dest,char* sor)
{
while(*sor != '\0')
{
*dest=*sor;
sor++;
dest++;
}
*dest=*sor;//赋值\0
}
int main()
{
char arr1[]="###########";
char arr2[]="bit";
my_strcopy(arr1,arr2);
printf("%s\n",arr1);
return 0;
}
优化
#include <stdio.h>
void my_strcopy (char* dest,char* sor)
{
while(*dest++=*sor++)//后置自增,且在当*sor=\0时,赋值过来while条件为假,跳出结束
{
;
}
}
int main()
{
char arr1[]="###########";
char arr2[]="bit";
my_strcopy(arr1,arr2);
printf("%s\n",arr1);
return 0;
}
第二步优化在于:对NULL进行限制,用到断言assert函数,不等于null时可以运行,保证指针的有效性
#include <stdio.h>
#include<assert.h>
void my_strcopy (char* dest,char* sor)
{
assert(dest!=null);//断言
assert(sor!=null);
while(*dest++=*sor++)
{
;
}
}
int main()
{
char arr1[]="###########";
char arr2[]="bit";
my_strcopy(arr1,null);
printf("%s\n",arr1);
return 0;
}
第三步优化在于对char * sor前加一个const,有利于调试阶段找问题,类似于解释为变量转成常量不能改变,const char* sor
第四步优化对my_strcopy的类型设置为char 型,因为我们最后需要的是字符串的打印,在这里设置字符类型且最后返回char* ret = dest ; return ret ; 有利于我们简化代码