日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

error c4996: 'fopen' This function or variable may be unsafe如何解决

發布時間:2023/12/2 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 error c4996: 'fopen' This function or variable may be unsafe如何解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.問題描述

??? VS2013+OPENCV249,不止一次遇到以下類似錯誤:

? ? ? error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.d:\opencv\opencv\build\include\opencv2\flann\logger.h661rodrigues

2.原因

? ?Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些帶有“_s”后綴的函數)

? ?這種微軟的警告,主要因為那些C庫的函數,很多函數內部是不進行參數檢測的(包括越界類的),微軟擔心使用這些會造成內存異常,所以就改寫了同樣功能的函數,改寫了的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。關于這些改寫的函數你不用專門去記憶,因為編譯器對于每個函數在給出警告時,都會告訴你相應的安全函數,查看警告信息就可以獲知,在使用時也再查看一下MSDN詳細了解。

3.解決方案

? ?方法一:將原來的舊函數替換成新的 Security CRT functions。

? ?方法二:用以下方法屏蔽這個警告:

??? 1. 在預編譯頭文件stdafx.h里(注意:一定要在沒有include任何頭文件之前)定義下面的宏:

???????#define _CRT_SECURE_NO_DEPRECATE

??? 2. 或聲明?#param warning(disable:4996)

??? 3. 更改預處理定義:

??????? 項目->屬性->配置屬性->C/C++ -> 預處理器 -> 預處理器定義,增加:

????????????_CRT_SECURE_NO_DEPRECATE

? ? 方法三:方法二沒有使用更加安全的 CRT 函數,顯然不是一個值得推薦的好方法,但我們又不想一個一個地改函數名,這里還有一個更簡便的方法:

? ?在預編譯頭文件 stdafx.h 里(同樣要在沒有include任何頭文件之前)定義下面的宏:

? ?#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1

? ?在鏈接的時候便會自動將舊函數替換成 Security CRT functions 。

? ?注意:這個方法雖然使用了新的函數,但是不能消除警告(原因見紅字),你還得同時使用方法二(-_-)。即實際應在預編譯頭文件 stdafx.h 里加入下面兩句:

? ?#define _CRT_SECURE_NO_DEPRECATE

? ?#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1


Note:使用了方法二的2/3沒效果,1可以

轉自:https://www.cnblogs.com/gb2013/archive/2013/03/05/SecurityEnhancementsInTheCRT.html




總結

以上是生活随笔為你收集整理的error c4996: 'fopen' This function or variable may be unsafe如何解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。