字符串拷贝,遇到'\0'停止。

strcpy()函数原型:

#include<stdio.h>

int main()

{

char arr1[] = "###############";

char arr2[] = "bit";

       strcpy(arr1, arr2);

       printf("%s\n", arr1);

       return 0;

}

//看我怎么模拟实现这个功能的哈;

Code1(2分)

#include<stdio.h>

void my_strcpy(char* dest,char* src)

{

while(*src!='\0')

{

*dest=*src;

src++;

dest++;

}

*dest=*str;//'\0';//没忘记<string.h>里的兄弟们跟'\0'的恩恩怨怨,+1;

}

int main()

{

char arr1[]="################";

char arr2[]="bit";

my_strcpy(arr1,arr2);//套用函数,+1分;

printf("%s\n".arr1);

return 0;

}

//身为面试题,这个代码太挫了,到家了,

//优化一下:

Code2(4分)

#include<stdio.h>

void my_strcpy(char* dest,char* src)

{

while(*src)//逻辑转换,节省了空间,+1分;

{

*dest++=*src++;//巧用后置自增的特性,+1分;

}

*dest=*src;

}

int main()

{

char arr1[]="##############";

char arr2[]="bit";

my_strcpy(arr1,arr2);

printf("%s\n",arr1);

return 0;

}

//这个代码也太辣鸡,连字符串和'\0'都要分开写;

//优化一下:

Code3(6分)

#include<stdio.h>

void my_strcpy(char* arr1,char* arr2)

{

while(*dest++=*src++)//避免了字符串与'\0'分开写,+1分;

{

;//不可缺失,+1分;

}

}

int main()

{

char arr1[]="##############";

char arr2[]="bit";

my_strcpy(arr1,arr2);

printf("%s\n",arr1);

return 0;

}

//优化的力度还是太小了,万一出现空指针怎么办,

//优化一下:

Code4(7分)

#include<stdio.h>

void my_strcpy(char* dest, char* src)

{

if(dest!=NULL&&src!=NULL)//防止传参有空指针,为了指针的有效性,+1;

{

while(*dest++=*src++)

{

;

}

}

}

int main()

{

char arr1[] = "###############";

      char arr2[] = "bit";

      my_strcpy(arr1, arr2);

      printf("%s\n", arr1);3

return 0;

}

这个思维考虑了万一空指针怎么办,但是还不够,去MSDN看一下定义吧

优化一下:

Code5(8分)

#include<stdio.h>

#include<assert.h>

void  my_strcpy(char* dest, char* src)

{

assert(dest != NULL);//断言-发现空指针会报错-比if高级吧哈哈;

assert(src !=NULL);//使用了库函数,+1;

//把src指向的字符串拷贝到dest指向的空间,包含'\0'字符;

while(*dest++=*src++)

{

;

}

}

int main()

{

      char arr1[] = "###############";

      char arr2[] = "bit";

      my_strcpy(arr1, arr2);

      printf("%s\n", arr1);3

return 0;

}

//查看定义发现,

//char *strcpy( char *strDestination, const char *strSource );

//老规矩,优化一下:

Code6(10分)

#include<stdio.h>

#include<assert.h>

char* my_strcpy(char* dest,const char* src)//const使得src成为常量指针,不会被赋值,若是卸载了左侧会报错提醒,+0.5分;

{

char* ret =dest;//将目的地的起始地址存起来用来最后返回,因为返回++后的地址毫无意义,返回去也找不到,点睛之笔+1分;

assert(*dest!=NULL);//括号内成立则nothing;

assert(*src!=NULL);

while(*dest++=*src++)

{

;

}

//strcpy()函数原型是有char*返回值,所以,这里返回;

return ret;

}

int main()

{

      char arr1[] = "###############";

      char arr2[] = "bit";

      printf("%s\n", my_strcpy(arr1, arr2));//将一个函数返回值当作另一个函数的参数-链式访问,+0.5分;

return 0;

}

//低调,低调,不要鼓掌!!