@清晰掉 string.h之基础堵漏
2015-08-27 09:37
309 查看
一个标准的strcpy函数:
原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。
下面给出网上strcpy的得分版本:
2分
4分
7分
10分
关键是:
为了实现链式操作,将目的地址返回
这句是个神马回事,我的面试题就是:
strcpy函数返回值有神马作用?
结果彻底悲剧了,尼玛确实不知道。
先来看看微软的代码:
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
发现微软的代码很简单,bug一堆是吧?但是 return( dst );到底有神马作用?
考虑:
int length = strlen( strcpy(str, “Hello World”) );
你就能发现奥秘了。为了实现链式操作,将目的地址返回 原来说的就是这么一会事:
Strcpy函数可以作为另外一个函数的实参。
strcat();等函数也是类似.
原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。
下面给出网上strcpy的得分版本:
2分
void strcpy( char *strDest, char *strSrc ) { while( (*strDest++ = * strSrc++) != '\0’ ); } |
void strcpy( char *strDest, const char *strSrc ) //将源字符串加const,表明其为输入参数,加2分 { while( (*strDest++ = * strSrc++) != '\0’ ); } |
void strcpy(char *strDest, const char *strSrc) { //对源地址和目的地址加非0断言,加3分 assert( (strDest != NULL) && (strSrc != NULL) ); while( (*strDest++ = * strSrc++) != '\0’ ); } |
//为了实现链式操作,将目的地址返回,加3分! char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != '\0’ ); return address; } |
为了实现链式操作,将目的地址返回
这句是个神马回事,我的面试题就是:
strcpy函数返回值有神马作用?
结果彻底悲剧了,尼玛确实不知道。
先来看看微软的代码:
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
发现微软的代码很简单,bug一堆是吧?但是 return( dst );到底有神马作用?
考虑:
int length = strlen( strcpy(str, “Hello World”) );
你就能发现奥秘了。为了实现链式操作,将目的地址返回 原来说的就是这么一会事:
Strcpy函数可以作为另外一个函数的实参。
strcat();等函数也是类似.
相关文章推荐
- MyBatis自定义数据映射TypeHandler
- XML方式实现Spring的AOP
- C#与java交互导入EXCEL
- U3D学习笔记(3)
- Unity3D 调用Android原生方法
- hiho一下第60周《String Matching Content Length》
- sql计算时间差执行存储过程
- UIButton
- UVA 562 Dividing coins(01 背包问题)
- Start with a Walking Skeleton
- Android 使用LeakCanary 检测内存泄露
- 使用JavaScript动态更改CSS样式
- AOP的Advice
- HDU 5144 NPY and shot(三分角度)
- POJ 2350 Above Average(水~)
- POJ 2328 Guessing Game(水~)
- The Euler function HDU杭电2824 【欧拉函数打表】
- Prefer Principles, Axioms, and Analogies to Opinion and Taste
- Annotation方式实现AOP
- 信息可视化中的时间线设计,不懂的过来