/*? ? 若是? ? strcat(s2,s3);? ? strcpy(s1,s2);? ? 則無法顯示*/代碼這樣的話,應(yīng)該是整個程序都崩潰掉了,因為前面的語句也無法輸出? ? strcat(s2,s3);? ? strcpy(s3,s2);卻可以運行,但是s2的內(nèi)容卻為空,長度為0感覺是s2的空間問題,應(yīng)該是超出了范圍,但是沒有報異常卻可以運行為什么?
2 回答

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