這是對程序產(chǎn)生BUG,出現(xiàn)不可靠性的一個描述,有些函數(shù)在某些意外情況會導(dǎo)致程序陷入不可控狀態(tài),僅僅是PC上運行最多也就是退出而已,但是如果是運行在飛機等系統(tǒng)里的話,就會有大麻煩,說危險也不為過。因為英文文獻(xiàn)里描述為dangerous,所以也就翻譯為危險。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了寧鄉(xiāng)免費建站歡迎大家使用!
函數(shù)執(zhí)行需要一個??臻g,但這個??臻g容量是有限的,而且棧里存放了函數(shù)返回的地址。
gets()函數(shù)在獲取輸入時,如果無限輸入會造成??臻g溢出,在程序返回時,不能正常的找到返回地址,程序?qū)l(fā)生不可預(yù)測行為
讓人分析代碼,至少要把代碼貼出來運行啊,總不可能抄寫你的代碼吧!
gets和scanf()的區(qū)別就是前者接收空格、制表符Tab和回車等,遇見EOF停止!而后者遇見空格、制表符Tab和回車等就停止;
數(shù)組只能存1234\0;后面的56789都是越界的;為什么到8沒有關(guān)系,而是9崩潰是因為你運氣好,空閑內(nèi)存還有;第9個剛好訪問了其他程序的內(nèi)存!
而為什么puts和printf可以打印到8是因為再8后面才遇到'\0';
為什么for只輸出4個數(shù);是因為你用的32位編譯器,所以sizeof(st)==4;如果你用64的編譯器,那么sizeof(st)==8;因為指針大小再32是4個字節(jié),64位8個字節(jié)!
好了,老板的4個問題都幫你分析了!給財富值200;
gets確實是不安全的,因為無法知道該函數(shù)返回的數(shù)據(jù)有多長。
安全的用法是用fgets替代gets