這樣使用gets()已經(jīng)發(fā)生了溢出!這是gets()不檢查數(shù)據(jù)邊界的bug造成的。另外,“字符串不是總是以\0作為串的結(jié)束符”,答案是肯定的,不然puts()函數(shù)就不能在合適的地方停下來(lái)了。
創(chuàng)新互聯(lián)專(zhuān)注于達(dá)坂城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),成都做商城網(wǎng)站。達(dá)坂城網(wǎng)站建設(shè)公司,為達(dá)坂城等地區(qū)提供建站服務(wù)。全流程按需策劃,專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
這是對(duì)程序產(chǎn)生BUG,出現(xiàn)不可靠性的一個(gè)描述,有些函數(shù)在某些意外情況會(huì)導(dǎo)致程序陷入不可控狀態(tài),僅僅是PC上運(yùn)行最多也就是退出而已,但是如果是運(yùn)行在飛機(jī)等系統(tǒng)里的話,就會(huì)有大麻煩,說(shuō)危險(xiǎn)也不為過(guò)。
gets確實(shí)是不安全的,因?yàn)闊o(wú)法知道該函數(shù)返回的數(shù)據(jù)有多長(zhǎng)。
您的這個(gè)題目,系統(tǒng)已經(jīng)很明顯告訴您了錯(cuò)誤的原因。因?yàn)槟x的x為字符型數(shù)據(jù),那么它對(duì)應(yīng)的輸入輸出格式符為%c,但是您在輸入語(yǔ)句中寫(xiě)的是%s,是字符串格式,不符合字符型單個(gè)變量的輸入輸出。
1、時(shí)可能由于輸入?yún)?shù)不符合 相關(guān)規(guī)則導(dǎo)致得不到合理結(jié)果則返回 1(非零 , 可以自定義錯(cuò)誤含義),如果沒(méi)有任何問(wèn)題,得到預(yù)期結(jié)果則返回 0;c語(yǔ)言要求我們要有良好的函數(shù)書(shū)寫(xiě)習(xí)慣。當(dāng)然也可以通過(guò)返回值進(jìn)行傳遞值。
2、……fun(a);a++;……當(dāng)fun(a)結(jié)束后就會(huì)返回調(diào)用處,執(zhí)行下一句a++了。遞歸函數(shù)是先展開(kāi)的過(guò)程,每次調(diào)用新的遞歸函數(shù)就進(jìn)入下一層,直到遇到終止條件,然后一層層返回。
3、樓主針對(duì)你這句給你解釋下:“str 屬于局部變量,位于棧內(nèi)存中,在Func 結(jié)束的時(shí)候被釋放,所以返回str 將導(dǎo)致錯(cuò)誤。為什么當(dāng)返回的是int *p類(lèi)型時(shí)卻正確?按理說(shuō)應(yīng)該都被釋放了。
是的,如果這是某書(shū)上的做法,那么,我只能說(shuō)它為你們提供了一個(gè)錯(cuò)誤的榜樣。這樣使用gets()已經(jīng)發(fā)生了溢出!這是gets()不檢查數(shù)據(jù)邊界的bug造成的。
編譯器是不知道你要傳遞的是一個(gè)數(shù)組或是單一一個(gè)整型的地址的,這是因?yàn)镃中數(shù)組的內(nèi)存模型是連續(xù)存儲(chǔ)(它并不知道傳遞的(首)地址之后的空間可否訪問(wèn))。
在C語(yǔ)言中,如果把數(shù)組作為一個(gè)函數(shù)的參數(shù)的話,在對(duì)函數(shù)進(jìn)行傳值的時(shí)候只是把數(shù)組的首地址傳過(guò)去,也就是指針傳過(guò)去,所以再用sizeof(array)/sizeof(int)求數(shù)組的大小只能得到1。
C語(yǔ)言如果給函數(shù)傳遞二維數(shù)組作為參數(shù) 先看一個(gè)傳遞二維數(shù)組的例子:編譯:程序看著沒(méi)有任何問(wèn)題,但是編譯器通不過(guò),報(bào)錯(cuò)在處理二維數(shù)組參數(shù)a的時(shí)候,類(lèi)型不兼容。
分享名稱(chēng):c語(yǔ)言的函數(shù)為什么危險(xiǎn) c語(yǔ)言為什么要有函數(shù)
分享地址:http://chinadenli.net/article19/dehcpgh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、軟件開(kāi)發(fā)、網(wǎng)站排名、建站公司、云服務(wù)器、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
聲明:本網(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)