第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

請問一個(gè) memcpy 的問題

請問一個(gè) memcpy 的問題

大話西游666 2019-03-29 22:08:34
#include#include#includemain(){char*src="abc123";char*dest="test";//這樣會發(fā)生segmentationfault(coredumped)//chardest[10]="test";//success這樣成功執(zhí)行//char*dest=strdup("test");//success這樣成功執(zhí)行memcpy(dest,src,strlen(src)+1);printf("%s\n",dest);}//關(guān)于memcpy復(fù)制字符串時(shí),memcpy(dest,src,strlen(src)+1),目標(biāo)字符串dest類型char*xxx,charxxx[]有什么不同,char*會發(fā)生segmentationfault(coredumped),而charxxx[]不會,但strdup后的char*就能成功執(zhí)行。
查看完整描述

2 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

char*x="xyz";的標(biāo)準(zhǔn)寫法是constchar*x="xyz";,通常用來表示「字符串字面量」,即編譯器會把這個(gè)字符串放到常量區(qū),因此向其中寫入數(shù)據(jù)會發(fā)生錯(cuò)誤。
char[]是一個(gè)數(shù)組,被置于自動變量區(qū),因此可以改變它的值。
strdup會用malloc申請一段內(nèi)存,并將參數(shù)復(fù)制進(jìn)去,因此這個(gè)變量位于堆內(nèi)存上,也是可寫的。
其實(shí)在后兩句中,會「隱式」地創(chuàng)建一個(gè)「字符串字面量」,然后將它復(fù)制到一段可寫內(nèi)存上。
                            
查看完整回答
反對 回復(fù) 2019-03-29
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

char*dest="test";在一些編譯器編譯后分配的是只讀空間是一個(gè)原因,另一個(gè)很顯而易見,但是樓上沒有人說,我補(bǔ)充一下。"test"一共分配5個(gè)字節(jié)的內(nèi)存。你往里面copy的"abc123"長度是7個(gè),顯然越界了嘛,你在什么編譯器下面編譯都會發(fā)生segmentationfault(coredumped)的。
簡單的這樣寫很糟糕memcpy(dest,src,strlen(src)+1);這就是萬惡之源,不搞清內(nèi)存大小后面會帶來無盡的痛苦的。
                            
查看完整回答
反對 回復(fù) 2019-03-29
  • 2 回答
  • 0 關(guān)注
  • 488 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號