strcpy完整版 與 strcpy為什么有返回值


一個標准的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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM