scanf返回值被忽略的原因及其解決方法

昨天在使用Visual Studio 2019編寫C語言程序時遇到了scanf返回值被忽略問題

1

因爲我也是剛開始使用VS2019學習C語言,第一次遇到這種問題,也不知道怎麼回事,然後就上Chrome研究了一番,才知道原因,並且找到了幾種分散在個個角落的解決方法,我在這裏歸納總結一下。

問題原因:

在ANSI C中只有scanf(),沒有scanf_s(),但是scanf()在讀取時不檢查邊界,所以可能會造成內存泄漏。於是Microsoft公司在VS編譯器中提供了scanf_s(),如果想繼續使用scanf這個不安全的函數,可以通過以下方法解決。

方法①:

把scanf改成:scanf_s

這是VS編譯器特有,既然覺得scanf()不安全,那它就自己定義了一個scanf_s()。

3

方法②:

編譯器錯誤提示的原因至於VS中的SDL檢查,只需要找到它並關閉就可以了。

關閉步驟:右鍵“項目文件” —— “屬性” —— “配置屬性” ——“C/C++”——“常規”——“SDL檢查”改爲“否”即可,如圖所示
2
改爲否後,再次編譯就沒問題了。
2.5


方法③:

在C語言程序開頭添加代碼:#pragma warning(disable:4996)

//全部關掉

(或者)

在C語言程序開頭添加代碼:#pragma warning(once:4996)

//僅顯示一個
5
15

方法④:

在C語言程序開頭添加代碼:#define _CRT_SECURE_NO_WARNINGS

//忽略安全檢測
4
每次都要加這麼一串代碼的話是不是感覺有點費力??(我一開始找到這種方法的時候第一感覺也是這樣的)

其實不用那麼麻煩,我們只需要在VS中加入 _CRT_SECURE_NO_WARNINGS 這個宏就可以了,具體操作如下圖所示:
14
一次搞定,後面都不用再弄了。我個人偏向於第④種方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章