strcpy完整版 与 strcpy为何有返回值

一个标准的strcpy函数:

本来觉得本身对strcpy还算比较了解,结果面试时仍是悲剧了。c++

下面给出网上strcpy的得分版本:面试

2分函数

void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != '\0’ );
}ui

4分blog

void strcpy( char *strDest, const char *strSrc ) 
//将源字符串加const,代表其为输入参数,加2分
{
while( (*strDest++ = * strSrc++) != '\0’ );
}字符串

7分get

void strcpy(char *strDest, const char *strSrc) 
{
//对源地址和目的地址加非0断言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != '\0’ );
}it

10分static

//为了实现链式操做,将目的地址返回,加3分!
char * strcpy( char *strDest, const char *strSrc ) 
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest; 
while( (*strDest++ = * strSrc++) != '\0’ ); 
return address;
}while

关键是:

为了实现链式操做,将目的地址返回

strcpy函数返回值有神马做用?

看看微软的代码:

char * __cdecl strcpy(char * dst, const char * src)
{
        char * cp = dst;
        while( *cp++ = *src++ )
                ;               /* Copy src over dst */
        return( dst );
}
可是 return( dst );到底有神马做用?

考虑:

int length = strlen( strcpy(str, “Hello World”) );
你就能发现奥秘了。为了实现链式操做,将目的地址返回  原来讲的就是这么一会事:

Strcpy函数能够做为另一个函数的实参。

声明:转载自 http://blog.163.com/xiangzaihui@126/blog/static/166955749201182695220753/

相关文章
相关标签/搜索