VS2019中scanf返回值被忽略的問題及其解決方法
目錄
昨天在使用Visual Studio 2019編寫C語言程式時遇到了scanf返回值被忽略問題
因為我也是剛開始學習C語言,第一次遇到這種問題,也不知道怎麼回事,然後就上Chrome研究了一番,才知道原因,並且找到了幾種分散在個個角落的解決方法,我在這裡歸納總結一下。
問題原因:
在ANSI C中只有scanf(),沒有scanf_s(),但是scanf()在讀取時不檢查邊界,所以可能會造成記憶體泄漏。於是Microsoft公司在VS編譯器中提供了scanf_s(),如果想繼續使用scanf這個不安全的函數,可以通過以下方法解決。
方法①:
把scanf改成:scanf_s
這是VS編譯器特有,既然覺得scanf()不安全,那它就自己定義了一個scanf_s()。
方法②:
編譯器錯誤提示的原因至於VS中的SDL檢查,只需要找到它並關閉就可以了。
關閉步驟:右鍵「項目文件」 —— 「屬性」 —— 「配置屬性」 ——「C/C++」——「常規」——「SDL檢查」改為「否」即可,如圖所示
改為否後,再次編譯就沒問題了。
方法③:
在C語言程式開頭添加程式碼:#pragma warning(disable:4996)
//全部關掉
(或者)
在C語言程式開頭添加程式碼:#pragma warning(once:4996)
//僅顯示一個
方法④:
在C語言程式開頭添加程式碼:#define _CRT_SECURE_NO_WARNINGS
//忽略安全檢測
每次都要加這麼一串程式碼,是不是感覺有點費力??(我一開始找到這種方法的時候第一感覺也是這樣的)
其實不用那麼麻煩,這裡還可以細分為兩種方法:
(1)我們只需要在VS中加入 _CRT_SECURE_NO_WARNINGS 這個宏就可以了,具體操作如下圖所示:
(2)在VS2019的安裝路徑下找到「newc++file.cpp」這個文件,用記事本的方式打開,並把這行程式碼複製粘貼上去,然後保存即可,這樣以後每次新建.c源文件的時候這行程式碼就會自動出現在第一行。
【注意】如果在保存的時候出現「拒絕訪問」的情況,可以測試下載安裝一個工具「Notepad++」,然後以管理員的身份運行這個軟體,用這個軟體打開上面提到的「newc++file.cpp」文件,複製粘貼程式碼上去後,保存即可。
最後提到的這兩種都是一次搞定,後面都不用再弄了。
我個人偏向於方法④的第(1)種方法。我也比較推薦你使用這種方法——畢竟簡單而且可以說是一勞永逸