C语言strcpy函数实现.
2014-02-14 01:02
274 查看
看面试题的时候有个题目是不使用库函数,实现strcpy函数.(字符串拷贝函数)
这个是我写的代码,在机器上编译过了.
看了很多帖子,发现我这个代码的问题还是很多的.即使这么简单的一个小程序也有很多的东西需要考虑.下面总结:
1.关于函数返回值.我写的是void,即函数不返回参数.所以我这个函数的唯一目的是将s地址字符串复制到t上.不返回任何信息.这样写的代码在以后使用是不方便的.林锐<高质量C/C++编程指南>里提到:返回char *的目的是为了实现链式表达式.如:
2.保留原串的问题.
正因第一个错误犯下导致了第二个错误的直接产生,那就是保留目标串首地址的问题.既然要返回目标串的话肯定是返回目标串的首地址.即return t.而在函数里对t要进行地址移动操作,所以在开始要保存t的地址.
3.关于源串,目标串的检查问题.
这个主要是检查源串,目标串指针的合法性.
这样一来,比较合格的strcpy()函数完成:(这个也是林锐博士在高质量C/C++编程当中的源代码)
其实在GNU C的strcpy源代码当中并没有对串指针合法性的检测.看了网上帖子大家争论的原因是:assert()这个函数非常的繁琐耗时.所以GNU C是为了提高效率,而且本意是如果出错则程序会crash,而检查crash则是程序员慢慢调试.库函数则是以效率为先!
这个是我写的代码,在机器上编译过了.
void my_strcpy(char *t,char *s){ while((*t++=*s++)); }
看了很多帖子,发现我这个代码的问题还是很多的.即使这么简单的一个小程序也有很多的东西需要考虑.下面总结:
1.关于函数返回值.我写的是void,即函数不返回参数.所以我这个函数的唯一目的是将s地址字符串复制到t上.不返回任何信息.这样写的代码在以后使用是不方便的.林锐<高质量C/C++编程指南>里提到:返回char *的目的是为了实现链式表达式.如:
int length=strlen(strcpy(strDest,"HelloWorld"));//如果没有返回char *那么要多写几行代码非常麻烦.
2.保留原串的问题.
正因第一个错误犯下导致了第二个错误的直接产生,那就是保留目标串首地址的问题.既然要返回目标串的话肯定是返回目标串的首地址.即return t.而在函数里对t要进行地址移动操作,所以在开始要保存t的地址.
char *strDest=t; //t的地址保留在strDest,这样直接返回strDest即可,而可以操作t.
3.关于源串,目标串的检查问题.
这个主要是检查源串,目标串指针的合法性.
assert((t!=NULL) && (s!=NULL)); //如果t,s均!=NULL那么就继续执行,如果不是的话并退出程序并输出错误信息.
这样一来,比较合格的strcpy()函数完成:(这个也是林锐博士在高质量C/C++编程当中的源代码)
char *my_strcpy(char *t,char *s){ char *strDest=t; assert((*t)!=NULL && (*s)!=NULL); while((*t++=*s++)); return strDest; }
其实在GNU C的strcpy源代码当中并没有对串指针合法性的检测.看了网上帖子大家争论的原因是:assert()这个函数非常的繁琐耗时.所以GNU C是为了提高效率,而且本意是如果出错则程序会crash,而检查crash则是程序员慢慢调试.库函数则是以效率为先!
相关文章推荐
- C语言实现strcmp()和strcpy()函数
- C语言中strlen() strcpy() strcat() strcmp()函数的实现方法
- 字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现
- C语言 不使用strcpy 函数实现字符串复制功能
- 【C语言】strcpy(),strcat(), strcmp()函数的实现
- C语言strcpy()库函数的实现
- C语言字符串相关库函数的实现strcpy、memcpy、strncpy、strcat、strncpy、memset、memcpy、strcpy
- C语言实现strcmp()和strcpy()函数
- C语言:向函数传递和返回字符串:Strlen函数、Strcpy、Strcat函数函数的实现
- 学习笔记——strlen、strcpy、memcpy的c语言实现,不调用库函数
- 实现C语言strcpy()函数
- 【转】字符串操作函数 C语言实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 杂记之C语言实现复制函数strcpy和strcnpy
- C语言实现strlen,atoi, strcpy等函数
- C语言测试。自己实现scandir 函数
- C语言中的字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
- C语言可变参数函数实现原理
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- C语言中模拟实现strcpy,strstr,strcat函数
- C语言 strcpy()函数的崩溃探索