一個標准的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 ); 
} 
但是 return( dst );到底有神馬作用?
考慮:
int length = strlen( strcpy(str, “Hello World”) ); 
你就能發現奧秘了。為了實現鏈式操作,將目的地址返回  原來說的就是這么一會事:
Strcpy函數可以作為另外一個函數的實參。
聲明:轉載自 http://blog.163.com/xiangzaihui@126/blog/static/166955749201182695220753/
