scanf不安全嗎

2021-08-17 23:56:58 字數 581 閱讀 9071

老是有人說scanf不安全,在vs中都不能直接使用sacnf,必須使用scanf_s();

以下說明下scanf不安全的例項。以下**c陣列申請了四個位元組的空間,最後輸入的時候輸入6個w,而此時,另外多餘的w會越界到 flag的位元組空間裡,從把int型的flag的四個位元組填充為77770000。從下圖記憶體分布資訊可以看到,c的位址是0x0019ff38,flag的位址是0x0019ff3c。兩個位址的間距剛好是c陣列的大小。說明兩個陣列c跟flag分配的虛擬位址是連續的。

這裡說下flag的值為什麼是這麼個30583數字,因為w的ascii碼值的十六進製制是77。然後就涉及到cpu的大小端模式了。對於我的電腦處理器x64,那麼他就是小端模式。那什麼又是小端模式呢? 小端模式是:低位址對應低位(進製),高位址對應高位。那這樣的話 flag的位址的數字應該是反過來的 也就是  0x00007777 。轉化為10進製 ,也就是如圖所示的flag的值是30583的**了。

scanf函式的不安全性分析

int scanf char 是其函式宣告。其中只要求第乙個引數是char 即字串即可,而對於其他引數則沒有限制型別和個數,這其中有安全風險。舉個例子 scanf d c i,ch 如果從鍵盤上輸入的資料是 30 a?則變數ch的值是空格字元而不是字元 a 這種錯誤很隱蔽,因此建議讀者盡量不要使用s...

執行緒不安全

背景 執行緒不安全 sleep 模擬網路延遲 後多執行緒併發訪問同乙個資源 方法1 同步 塊 語法 synchronized 同步鎖 catch interruptedexception e 方法2 同步方法 使用synchronizd修飾的方法,就叫同步方法,保證a執行緒執行該方法的時候,其他執行...

VS2019提示scanf不安全問題

我們現在學的就是使用scanf 語句進行輸入,但是vs2019中卻報錯顯示不安全 首先我先來說一下scanf和scanf s的區別 scanf 函式是標準c中提供的標準輸入函式,用以使用者輸入資料 scanf s 函式是microsoft公司vs開發工具提供的乙個功能相同的安全標準輸入函式,從vc ...