解決 C 不安全函式告警

2021-10-04 20:48:25 字數 1415 閱讀 5099

錯誤

詳細資訊

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執行緒執行該方法的時候,其他執行...