面试中strcpy源码的判分标准
来源:互联网 发布:java随机昵称生成器 编辑:程序博客网 时间:2024/05/27 12:21
如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
2分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
4分
void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
7分
void strcpy(char *strDest, const char *strSrc)
{
//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) &&(strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
10分
char * strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2分
{
assert( (strDest != NULL) &&(strSrc != NULL) );
//对源地址和目的地址加非0断言,加3分
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ );//2分
return address;
//为了实现链式操作,将目的地址返回,加3分!
}
从2分到10分的几个答案我们可以清楚的看到,需要多么扎实的基本功才能写一个完美的strcpy。
#include <assert.h>
char *strcpy(char *dst, const char *src)
{
assert((dst != NULL) && (src != NULL));
char *tmp = dst;
while ((*dst++ = *src++) != '\0') {
/* nothing */;
}
return tmp;
}
需要注意几个方面的问题:
1、注意编程风格。比如,使用dst、src这样增强可读性的名字。
2、使用断言assert来检验输入参数的有效性。
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回false,则终止程序执行。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。
3、使用const来约束src,表明src对应的内容不能被修改。
4、返回dst,以便实现链式表达式这样的机制。
- 面试中strcpy源码的判分标准
- 面试中必须会写的函数源码--------strcpy()与strlen()
- 面试实现!vs 并附上strcpy() 函数的源码
- 面试:strcpy的实现
- strcpy的一个标准实现
- 书写strcpy的源码
- strcpy的源码
- 关于strcpy的面试问题
- 笔试面试---不经意的strcpy
- 关于strcpy的问题,解释一下为什么VS中标准的方法不用memcpy实现
- strcpy和memcpy的标准实现
- C 标准库 strcpy 函数的实现
- strcpy函数的实现【面试攻略】
- 面试 :如何写一个满分的strcpy!!!
- strcpy源码
- strcpy源码
- strcpy源码
- Strcpy源码
- poj 3077 Rounders 【简单字符串处理】
- Arch Linux下VMware-Tools安装笔记
- hdu4970
- Queue
- 正则表达式的使用(2)__常用的正则表达式(积累)
- 面试中strcpy源码的判分标准
- 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划
- 天津出差系列(四)----第四天
- 淘宝数据库OceanBase SQL编译器部分 源码阅读--Schema模式
- poj 1546 进制转换
- Linux系统编程之访问文件夹及其文件属性
- xml简单功能
- HDU 1507 Uncle Tom's Inherited Land*(二分图最大匹配:输出一组解)
- hdu 4970