錯誤
詳細資訊
c4996
『scanf』:this function or variable may be unsafe. consider using scanf_s instead. to disable deprecation, use _crt_secure_no_warnings.
vs2019使用更安全的c14/c17標準, 認為這類函式不安全。
這類函式正常使用時,是沒有任何問題的。但是,部分黑客可能會利用其中的缺陷,開發惡意軟體,對系統造成影響(緩衝區溢位,程式崩潰)。
#include
#include
#include
using namespace std;
intmain
(void
)
方法1:使用修改專案的屬性,直接使用這些「不安全」的函式。
在專案名稱上右鍵,選擇專案屬性
新增: /d _crt_secure_no_warnings
方法2:使用c14標準中的「更安全」的函式
scanf_s
(陣列在c中的scanf不需要取位址&,因為本身就代表了位址)
gets不能使用,使用gets_s
(gets是老標準c語言函式,vs使用更安全的c11標準, 使用對應的gets_s
char line[32];
gets_s(line, sizeof(line));
//或者寫為gets_s(line,32);
scanf不能使用
原因同上,改用scanf_s
若用scanf輸入字串,沒有第三個引數故不知多長,若長度越界,則占用其他記憶體非常可怕
int x;
scanf_s
("%d"
,&x)
;//不需要使用第3個引數,用法和scanf相同
float f;
scanf_s
("%f"
,&f)
;//不需要使用第3個引數, 用法和scanf相同
char c;
scanf_s
("%c"
,&c,
sizeof
(c))
;//需要使用第3個引數, 否則有告警
char name[16]
;scanf_s
("%s"
, name,
sizeof
(name));
//需要使用第3個引數
int age;
char name[16]
;scanf_s
("%d%s"
,&age, name,
sizeof
(name)
);
c語言不安全庫 C語言 那些不安全的庫函式
c語言 那些不安全的庫函式 c和c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中...
c語言不安全庫 C語言 一些不安全的庫函式
那些不安全的庫函式 c 和 c 不能夠自動地做邊界檢查,邊界檢查的代價是效率。一般來講,c 在大多數情況下注重效率。然而,獲得效率的代價是,c 程式設計師必須十分警覺以避免緩衝區溢位問題。c語言標準庫中的許多字串處理和io流讀取函式是導致緩衝區溢位的罪魁禍首。我們有必要了解這些函式,在程式設計中多加...
執行緒不安全
背景 執行緒不安全 sleep 模擬網路延遲 後多執行緒併發訪問同乙個資源 方法1 同步 塊 語法 synchronized 同步鎖 catch interruptedexception e 方法2 同步方法 使用synchronizd修飾的方法,就叫同步方法,保證a執行緒執行該方法的時候,其他執行...