描述
用vs2013新建一個windows窗口項目,編寫代碼運行出現一下錯誤
錯誤 2 error C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解決辦法
1、根據錯誤提醒,將strcpy修改爲strcpy_s即可。
說明:
strcpy()
原型:char *strcpy(char *dst,const char *src)
功能:將以src爲首地址的字符串複製到以dst爲首地址的字符串,包括’\0’結束符,返回dst地址。要求:src和dst所指內存區域不可以重疊且dst必須有足夠的空間來容納src的字符串,若dst空間不足,編譯時並不會報錯,但執行時因系統不同會出現不同的結果:Mac系統提示“Abort trap:6”(Mac);CentOS7系統會正常運行(可能是個例,可以正常運行)
strcpy_s()
該函數是VS2005之後的VS提供的,並非C標準函數
原型:strcpy_s( char *dst, size_t num, const char *src )
功能:同strcpy()函數功能相同,不同之處在於參數中多了個size_t類型的參數,該參數爲字符串dst的長度,當存在緩存區溢出的問題時(即src的長度大於dst的長度),strcpy_s()會拋出異常;而strcpy()結果則未定,因爲它錯誤地改變了程序中其他部分的內存的數據,可能不會拋出異常但導致程序數據錯誤,也可能由於非法內存訪問拋出異常。
總結:strcpy在運行的過程中如果dst空間不足,在操作數據的時候,會修改dst空間外的數據,造成程序運行期間難以預料的錯誤。strcpy_s則不會出現此問題,但strcpy_s非標準庫函數。
2、右鍵項目屬性打開項目配置頁;找到c/c++預處理器項,在預處理器定義加入 _CRT_SECURE_NO_WARNINGS保存即可。
說明:這種處理辦法,就是表明接收strcpy有可能帶來的潛在錯誤。
通過以上兩種辦法都可以解決該錯誤。
希望對您有所幫助!