strcpy和strncpy用法和區(qū)別-創(chuàng)新互聯(lián)

void *memcpy(void *dest, const void *src, int n);

創(chuàng)新互聯(lián)建站長(zhǎng)期為上1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為沅陵企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站制作沅陵網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

功能:

      從源src所指的內(nèi)存地址的起始位置開始拷貝n個(gè)字節(jié)到目標(biāo)dest所指的內(nèi)存地址的起始位置中。

頭文件:

      #include <string.h>

返回值:

     指向dest的指針。

char *strcpy(char *dest, char *src);

功能:

      把src所指由'\0'結(jié)束的字符串復(fù)制到dest所指的數(shù)組中。

頭文件:

      #include "string.h"

返回值:

      指向dest的指針。

char * strncpy(char *dest, char *src, size_t n);

功能:

      將字符串src中最多n個(gè)字符復(fù)制到字符數(shù)組dest中

返回值:

      指向dest的指針。

頭文件:

      #include "string.h"

memcpy說(shuō)明:

1.src和dest所指內(nèi)存區(qū)域不能重疊,函數(shù)返回指向dest的指針。

2.與strcpy相比,memcpy并不是遇到'\0'就結(jié)束,而是一定會(huì)拷貝完n個(gè)字節(jié)。

3.如果目標(biāo)數(shù)組destin本身已有數(shù)據(jù),執(zhí)行memcpy()后,將覆蓋原有數(shù)據(jù)(最多覆蓋n)。如果要追加數(shù)據(jù),則每次執(zhí)行memcpy后,要將目標(biāo)數(shù)組地址增加到你要追加數(shù)據(jù)的地址。

//注意,src和dest都不一定是數(shù)組,任意的可讀寫的空間均可。

strcpy說(shuō)明:

      src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。

      當(dāng)src串長(zhǎng)度>dest串長(zhǎng)度時(shí),程序仍會(huì)將整個(gè)src串復(fù)制到dest區(qū)域,可是dest數(shù)組已發(fā)生溢出。因此會(huì)導(dǎo)致dest??臻g溢出以致產(chǎn)生崩潰異常。如果不考慮src串的完整性,可以把dest數(shù)組最后一元素置為NULL,從dest串長(zhǎng)度處插入NULL截取字串。

strncpy說(shuō)明:

      它并不像strcpy一樣只有遇到NULL才停止復(fù)制,而是多了一個(gè)條件停止,就是說(shuō)如果復(fù)制到第n個(gè)字符還未遇到NULL,也一樣停止。

      如果n > dest串長(zhǎng)度,dest??臻g溢出產(chǎn)生崩潰異常。

      否則:

      1)src串長(zhǎng)度<=dest串長(zhǎng)度,(這里的串長(zhǎng)度包含串尾NULL字符)

      如果n=(0, src串長(zhǎng)度),src的前n個(gè)字符復(fù)制到dest中。但是由于沒有NULL字符,所以直接訪問dest串會(huì)發(fā)生棧溢出的異常情況。

      如果n = src串長(zhǎng)度,與strcpy一致。

      如果n = dest串長(zhǎng)度,[0,src串長(zhǎng)度]處存放于desk字串,(src串長(zhǎng)度, dest串長(zhǎng)度]處存放NULL。

      2)src串長(zhǎng)度>dest串長(zhǎng)度

      如果n =dest串長(zhǎng)度,則dest串沒有NULL字符,會(huì)導(dǎo)致輸出會(huì)有亂碼。如果不考慮src串復(fù)制完整性,可以將dest最后一字符置為NULL。

      綜上,一般情況下,使用strncpy時(shí),建議將n置為dest串長(zhǎng)度(除非你將多個(gè)src串都復(fù)制到dest數(shù)組,并且從dest尾部反向操作),復(fù)制完畢后,為保險(xiǎn)起見,將dest串最后一字符置NULL,避免發(fā)生在第2)種情況下的輸出亂碼問題。當(dāng)然嘍,無(wú)論是strcpy還是strncpy,保證src串長(zhǎng)度<dest串長(zhǎng)度才是最重要的。

strncpy_s:目標(biāo)空間長(zhǎng)度不夠時(shí),會(huì)彈出assert,使copy不能正常完成,使用時(shí)需要指定源緩沖區(qū)大小。

          _s函數(shù)只是windows提供的特有函數(shù),功能比較強(qiáng)大,但是在有跨平臺(tái)需求的軟件中,不建議使用。

strncpy:拷貝你指定的個(gè)數(shù)或者碰到'\0',不驗(yàn)證源緩沖區(qū)長(zhǎng)度,可能造成越界。

memcpy:不理'\0',只拷貝你指定的個(gè)數(shù),故strcpy可以不指定字符串長(zhǎng)度,實(shí)現(xiàn)整串copy,而memcpy必定要指定長(zhǎng)度。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:strcpy和strncpy用法和區(qū)別-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://muchs.cn/article44/ceophe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷推廣網(wǎng)頁(yè)設(shè)計(jì)公司、ChatGPT、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司