1. 程式人生 > >《VS如何解決warning C4996: 'vsprintf': This function or variable may be unsafe.問題》

《VS如何解決warning C4996: 'vsprintf': This function or variable may be unsafe.問題》

問題描述 

使用VS2010在生成解決方案的時候,輸出視窗會出現一大堆warning C4996: 'xxx': This function or variable may be unsafe.這樣的警告資訊。參考了另外一位博主的說法:這是微軟的警告,主要是因為那些C庫的函式,很多函式內部是不進行引數檢測的(包括越界類的),微軟擔心使用這些會造成記憶體異常,所以就改寫了同樣功能的函式,改寫了的函式進行了引數的檢測,使用這些新的函式會更安全和便捷。關於這些改寫的函式你不用專門去記憶,因為編譯器對於每個函式在給出警告時,都會告訴你相應的安全函式,檢視警告資訊就可以獲知,在使用時也再檢視一下MSDN詳細瞭解,常見的警告資訊如下。

warning C4996: 'vsprintf': This function or variable may be unsafe. 
Consider using vsprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
See online help for details.

意思是:

警告C4996: 'vsprintf':此函式或變數可能不安全。考慮使用vsprintf_s代替。
要禁用棄用,請使用_CRT_SECURE_NO_WARNINGS。有關詳細資訊,請參見線上幫助。

 

解決方法 

1、根據上面的警告資訊進行修改,在函式名後面加上_s作為字尾,例如將vsprintf替換為vsprintf_s,通常情況下這樣修改就可以解決問題了,如果問題沒有解決,還是報了警告資訊,有可能就是修改函式名的同時也把函式引數給修改了,就得使用另外一種方法了。

2、如果前面還有警告,就使用_CRT_SECURE_NO_WARNINGS一次性解決吧,這個命令是不彈警告,具體新增方法如下,選中專案名稱,點選滑鼠右鍵選擇屬性,進入專案屬性頁,依次選擇配置屬性C/C++前處理器前處理器定義,然後在最後面新增_CRT_SECURE_NO_WARNINGS