2 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
你的理解沒有錯(cuò),strcat strcpy 這樣的函數(shù)需要第一個(gè)參數(shù)處有足夠大的存儲(chǔ)空間來容納后面參數(shù)接入的字符串。
為什么編譯時(shí)沒有報(bào)錯(cuò)呢?
從實(shí)現(xiàn)角度說,函數(shù)將兩個(gè)參數(shù)都視作指向存儲(chǔ)空間的指針,但憑指針并不能判斷出其指向的空間有多大,函數(shù)只能從這兩處空間進(jìn)行操作,一旦在運(yùn)行中遇到空間不足,就可能會(huì)出問題。
題外話:C語言指針的設(shè)計(jì)就是為了靈活,C語言的宗旨是相信程序員,不阻止程序員做他們想做的事。所以就要求程序員對(duì)原理有充分的理解,這也是C語言“難”的原因。
其實(shí)在現(xiàn)實(shí)中,這樣的錯(cuò)誤也很常見,所謂的“緩沖區(qū)溢出”漏洞多是存儲(chǔ)空間的問題。

TA貢獻(xiàn)1條經(jīng)驗(yàn) 獲得超0個(gè)贊
厲害,,在請(qǐng)教下, 那為什么將s2復(fù)制給s1就直接崩潰;而s2復(fù)制給s3是直接將s2空間清0呢??
- 2 回答
- 0 關(guān)注
- 1330 瀏覽
添加回答
舉報(bào)