实现strcpy得分点
来源:互联网 发布:拉姆赞卡德罗夫 知乎 编辑:程序博客网 时间:2024/06/02 00:21
一个标准的strcpy函数:
原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。
下面给出网上strcpy的得分版本:
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分
//为了实现链式操作,将目的地址返回,加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函数可以作为另外一个函数的实参。
- 实现strcpy得分点
- 实现strcpy得分点
- 实现strcpy得分点
- strcpy的用法、c语言实现、及注意点
- strcpy 实现
- strcpy实现
- strcpy实现
- strcpy实现
- strcpy实现
- strcpy实现
- strcpy实现
- strcpy实现
- strcpy实现
- strcpy实现
- 实现strcpy
- Strcpy 实现
- 实现 strcpy
- strcpy实现
- retrofit2 Content-Length and stream length disagree
- 从0到TrustZone(第二篇): QSEE提权漏洞及利用(CVE-2015-6639)
- HDP学习--HDFS Quotas
- 到底什么是数据库?
- PHP----对比session和cookie
- 实现strcpy得分点
- 设计模式系列之十一组合模式
- python之模块三
- 从0到TrustZone第三篇:从QSEE劫持Linux内核
- 国际化与ajax
- Android简单的Toast工具类
- Hibernate中的数据查询(二)
- ruby:数组人生,患得患失
- ubuntu vmware tools