不使用C/C++字符串库函数,如何自行编写strcpy( )函数
来源:互联网 发布:聊天自动翻译软件 编辑:程序博客网 时间:2024/05/30 05:02
不使用C/C++字符串库函数,如何自行编写strcpy( )函数
题目:已知strcpy( )函数原型如下:
char* strcpy(char* strDest, const char* strSrc)
1、不调用库函数,实现strcpy函数
2、解释为什么要返回 char*
首先第1问:
char* strcpy(char* strDest, const char* strSrc){ assert((strDest!=NULL) && (strSrc!=NULL)) if(strDest == strSrc) return strDest; char* address = strDest; while((*strDest++ = *strSrc++)!='\0') ; return address;}
然后对于第二问:为了实现链式表达式,关于什么是链式表达式,请自行百度
举个简单的例子:
int length = strlen(strcpy(strDest, "Hello World!"));
本题主要考察以下几点:
(1):检查指针的有效性。如果不检查指针的有效性,说明答题者不注重代码的健壮性
(2):类型的隐式转换。如果检查指针的有效性时使用(!strDest)||(!strSrc)或者(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。例如在本题中,(!strDest)就是将char*隐式转换为bool类型,这种功能虽然灵活,但是更多时候会导致出错,增加维护成本。所以C++中专门增加了bool类型的关键字true、false以提供更安全的条件表达式。
(3):保存原始的strDest值。如果答题者没有保存,则说明答题者逻辑思维不严密。
(4):将循环写成
while(*strDest++ = *strSrc++)
对隐式类型转换认识不足
while(*strSrc!='\0') *strDest++ = *StrSrc++;
说明答题者对边界条件的检查不足。上面的写法无法将strSrc结尾的零赋给strDest。可以修改如下:
while(*strSrc != '\0') *strDest++ = *strSrc++;*strDest = '\0';
(5):对于返回值的问题
- 如果返回的是一个新的其它的字符串,说明答题者根本就不知道返回值的作用,或者说不知道返回值是用来干什么的,并且也没考虑到内存泄露的问题。
- return 0; 说明答题者没有掌握异常机制。调用者可能会忘记检查返回值,还有可能无法检查返回值。
阅读全文
1 0
- 不使用C/C++字符串库函数,如何自行编写strcpy()函数
- 不使用C/C++字符串库函数,如何自行编写strcpy( )函数
- 不使用C/C++字符串数据库函数,如何自行编写strcpy()函数?
- 字符串---不使用库函数,编写函数strcpy
- 不调用C++/C的字符串库函数,请编写函数 strcpy
- 不调用C/C++的字符串库函数,请编写函数strcpy
- 不调用C++/C字符串库函数,实现字符串复制函数strcpy
- 自行编写Strcpy()函数
- 自行编写strcpy()函数
- C语言 不使用strcpy 函数实现字符串复制功能
- 不使用库函数实现字符串拷贝函数strcpy写法
- 不调用C/C++库函数实现strcpy函数
- 不使用库函数实现strcpy函数
- 【c语言】模拟实现库函数strcpy函数
- C语言:编写strcpy函数
- 模拟实现strcpy函数,不使用strcpy库函数
- 自行编写strcpy()函数和memcpy()函数
- 实现C库函数strcpy
- Android Monkey的使用
- 递归+二分查找
- 奇异值分解(SVD) --- 几何意义
- Android EditText 监听回车键
- install and configure postgresql
- 不使用C/C++字符串库函数,如何自行编写strcpy( )函数
- c++算法之深搜 浅谈回溯与不回溯
- 基数排序
- QT之鼠标、键盘、定时器
- C++----动态内存
- 系统设置页面跳转
- Java
- 51Nod-1525-重组公司
- 20.ViewFilpper+手势实现ViewPager功能+添加动画