error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead

描述

用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有可能帶來的潛在錯誤。

通過以上兩種辦法都可以解決該錯誤。
希望對您有所幫助!

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