**1:***arr1 = *arr2;
arr1++;
arr2++;
#include<stdio.h>
void MY_strcpy(char* arr1,char* arr2)
{
while("arr2!='\0')
{
*arr1 ++= *arr2 ++=;
}
*arr1 = *arr2;
}
int main()
{
char arr1[] = "hello world";
char arr2[] = "hello";
MY_strcpy(arr1,arr2);
printf("%s\n",arr1);
return 0;
}
优化代码不仅要在简介程度上下功夫,更应该考虑代码是否本身有问题,我在想,如果把空指针赋值上去,以上的代码还会实现吗??
#include<stdio.h>
void MY_strcpy(char* arr1,char* arr2)
{
while(*arr1++=*arr2++=)
{
;
}
}
int main()
{
char arr1[]="hello world";
char arr2[]="hello";
MY_strcpy(arr1,NULL);
printf("%s\n",arr1);
return 0;
}
这个是运行不了的。因为并没有将arr2的值赋值到arr1里面,所以没有进行交换,但只是将这种情况避免了,以下是优化后的代码:
#include<stdio.h>
#include<assert.h>
void MY_strcpy(char* arr1,char* arr2)
{
assert(arr1!= NULL);
assert(arr2!= NULL);
while(*arr1++=*arr2++)
{
;
}
}
int main()
{
char arr1[] = "hello world";
char arr2[] = "hello";
MY_strcpy(arr1,NULL);
printf("%s\n",arr1);
return 0;
}