題目:
已知strcpy函數(shù)的原型是:
char * strcpy(char * strDest ,const char * strSrc);
- 不調(diào)用庫(kù)函數(shù),實(shí)現(xiàn)strcpy函數(shù)刁笙。
- 解釋為什么要返回char*徐勃。
方法一
char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest!=NULL) && (strSrc !=NULL));
char *address = strDest;
while( (*strDest++ = * strSrc++) != '\0' )
NULL ;
return address ;
}
strcpy能把strSrc的內(nèi)容復(fù)制到strDest到推,為什么還要char * 類(lèi)型的返回值?
答:為了實(shí)現(xiàn)鏈?zhǔn)奖磉_(dá)式.
例如
int length = strlen( strcpy( strDest, “hello world”) );
方法二
char* strcpy1(char *strDest, const char* strSrc)
{
assert(strSrc != NULL );
assert(strDest != NULL);
int i;
char *address = strDest;
for(i = 0; strSrc[i] != '\0'; i++)
strDest[i] = strSrc[i];
strDest[i] = '\0';
return address;
}
方法三
char * strcpy3(char * strDest, const char * strSrc)
{
if ((NULL == strDest)||(NULL == strSrc))
throw "Invalid argument(s)";
char * strDestCopy=strDest;
while ((*strDest++=*strSrc++)!='\0');
return strDestCopy;
}
總結(jié)
- 如果參數(shù)是指針,且僅作輸入用嘉裤,則應(yīng)在類(lèi)型前加const,以防止該指針在函數(shù)體內(nèi)被意外修改
- 有時(shí)候函數(shù)原本不需要返回值栖博,但為了增加靈活性如支持鏈?zhǔn)奖磉_(dá)屑宠,可以附加返回值。
- 不要將正常值和錯(cuò)誤標(biāo)志混在一起返回仇让。正常值用輸出參數(shù)獲得典奉,而錯(cuò)誤標(biāo)志用return語(yǔ)句返回。錯(cuò)誤信息可以用throw拋出丧叽。