我用 Visual Stdio 2013 編寫C程序
出現下面這個錯誤:
錯誤 1 error C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
最後我在程序前加上一句“ #define _CRT_SECURE_NO_WARNINGS "就消去錯誤,能解釋一下嗎? 我不懂。。。
因為sprintf是不安全的,所以默認情況下編譯器拒絕編譯包含對它調用的代碼。
#define _CRT_SECURE_NO_WARNINGS 可以讓編譯器對此放行。
什麼叫不安全呢?我們知道,對於x86處理器來說,程序的數據和指令都是放在同一個內存中的,如果我們開辟的緩沖區比較小,而給sprintf傳遞了一個很大的字符串
就會發生緩沖區溢出,這樣可能破壞堆棧,如果堆棧中返回地址被修改,那麼精心構造的攻擊數據可能讓程序轉入另一個數據區域,並且將那裡的數據當成代碼執行。
如果這些代碼不懷好意,那麼就會破壞你的電腦為所欲為,所以叫不安全。