本來覺得本身對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/