strcpy和memcpy都是標(biāo)準(zhǔn)C庫(kù)函數(shù),它們有下面的特點(diǎn),。 strcpy提供了字符串的復(fù)制,。即strcpy只用于字符串復(fù)制,并且它不僅復(fù)制字符串內(nèi)容之外,,還會(huì)復(fù)制字符串的結(jié)束符,。 memcpy提供了一般內(nèi)存的復(fù)制。即memcpy對(duì)于需要復(fù)制的內(nèi)容沒(méi)有限制,,因此用途更廣,。 面試?yán)}5:編程實(shí)現(xiàn)strcpy函數(shù)。 考點(diǎn):字符串復(fù)制的實(shí)現(xiàn),。 出現(xiàn)頻率:★★★★ 已知strcpy函數(shù)的原型是:
要求如下,。 (1)不調(diào)用庫(kù)函數(shù),,實(shí)現(xiàn)strcpy函數(shù); (2)解釋為什么要返回char *,。 解析 程序代碼如下:
(1)strcpy函數(shù)的實(shí)現(xiàn)說(shuō)明。 代碼第5~第7行判斷傳入的參數(shù)strDest和strSrc是否為NULL,,如果是則返回NULL,。 代碼第9行把strDest的值保存到strDestCopy指針中。 代碼第10行對(duì)strSrc和strDest兩個(gè)指針進(jìn)行循環(huán)移動(dòng),,并不斷復(fù)制strSrc內(nèi)存的值到strDest內(nèi)存中,。 由于已經(jīng)保存了strDest指針的值,因此這里只需返回strDestCopy的值,,而函數(shù)調(diào)用完后返回的就是strDest的值,。 (2)strcpy函數(shù)返回char *類型的原因是為了能使用鏈?zhǔn)奖磉_(dá)式。首先調(diào)用strcpy使得strDest指針復(fù)制strSrc的內(nèi)存數(shù)據(jù),,然后調(diào)用getStrLen函數(shù)獲取strDest字符串的長(zhǎng)度,。這樣不僅調(diào)用方便,而且程序結(jié)構(gòu)簡(jiǎn)潔明了,。程序的輸出結(jié)果如下: strDest: Hello World! 面試?yán)}6:編程實(shí)現(xiàn)memcpy函數(shù),。 考點(diǎn):內(nèi)存復(fù)制的實(shí)現(xiàn)。 出現(xiàn)頻率:★★★★ 答案 程序代碼如下所示:
memcpy的實(shí)現(xiàn)如下,。 與strcpy不同,memcpy用參數(shù)size決定復(fù)制多少個(gè)字符(strcpy遇到結(jié)束符"\0"結(jié)束),。由于在主程序中只復(fù)制了strSrc的前4個(gè)字符(代碼第22行),,程序輸出如下:
面試?yán)}7:strcpy與memcpy的區(qū)別。 考點(diǎn):字符串復(fù)制與內(nèi)存復(fù)制之間的區(qū)別,。 出現(xiàn)頻率:★★★★ 解析 strcpy和memcpy主要有以下3方面的區(qū)別,。 復(fù)制的內(nèi)容不同。strcpy只能復(fù)制字符串,,而memcpy可以復(fù)制任意內(nèi)容,,例如字符數(shù)組、整型,、結(jié)構(gòu)體,、類等。 復(fù)制的方法不同,。strcpy不需要指定長(zhǎng)度,,它遇到字符串結(jié)束符"\0"便結(jié)束。memcpy則是根據(jù)其第3個(gè)參數(shù)決定復(fù)制的長(zhǎng)度。 用途不同,。通常在復(fù)制字符串時(shí)用strcpy,,而需要復(fù)制其他類型數(shù)據(jù)時(shí)則一般用memcpy。
資料2: strcpy函數(shù)的原型: 已知strcpy函數(shù)的原型是 1.strcpy的實(shí)現(xiàn)代碼 char* strcpy(char* strDest,const char* strSrc) throw "Invalid Arguments"; //[2] char* strDestCopy = strDest; //[3] while((*strDest++ = *strSrc++) != '\0')//[4] ; |
|
來(lái)自: 昵稱10788805 > 《Linux》