不调用库函数,模拟实现strcpy函数

来源:互联网 发布:企业网络信息平台构建 编辑:程序博客网 时间:2024/06/16 14:39
//模拟实现strcpy函数#include<stdio.h>#include<assert.h>void My_Strcpy_1(char * des, char * src){while (*src != '\0')//将src里面'\0'之前的字符拷贝过去{*des = *src;des++;src++;}*des = *src;//拷贝'\0'到des}void My_Strcpy_2(char * des, char * src){while (*des++ = *src++){;}//++的优先级高于*(解引用)//将src里面的第一个'\0'以及之前的字符拷贝过去//并且*des=='\0',条件为假,拷贝结束}void My_Strcpy_3(char * des, char * src){if (des == NULL || src == NULL)//用指针时要先判空{return;}while (*des++ = *src++){;}}void My_Strcpy_4(char * des, char * src){assert(des != NULL);assert(src != NULL);//void assert (int expression);//断言 里面表达式为假时,报错,即des或着src有一个为空时,报错//assert 在Debug版本下起作用,在给用户的Release版本下自动优化消失while (*des++ = *src++){;}}char * My_Strcpy_5(char * des, char * src)//完善返回类型{assert(des != NULL);assert(src != NULL);char *p = des;while (*p++ = *src++){;}return des;}char * My_Strcpy(char * des, const char * src)//保护源字符串{assert(des != NULL);assert(src != NULL);char *p = des;while (*p++ = *src++){;}return des;}//标准形式://char * strcpy ( char * destination, const char * source );//const修饰指针类型时,若放在*的 左边,受保护是 指针所指的内容//指针本身可以改变//但指向的内容不能用指针改变,但可以用其他方式改变//char const *p =NULL;   *p='a';//程序报错//const修饰指针类型时,若放在*的 右边,受保护的是 指针//指针指向的内容可以改变//指针本身不可以修改//char *const p=NULL;  p=ch2;//程序报错int main(){char ch1[20] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', '\0' };char ch2[20] = { 0 };/*My_Strcpy_1(ch2, ch1);*//*My_Strcpy_2(ch2, ch1);*//*My_Strcpy_3(ch2, ch1);*//*My_Strcpy_4(ch2, ch1);*//*My_Strcpy_5(ch2, ch1);*/My_Strcpy(ch2, ch1);//拷贝时将第一个'\0'拷贝过去后就结束printf("%s\n", ch2);return 0;}

原创粉丝点击