用于呼叫的引數太少/寫入位置時發生沖突/檢測到無效的例外處理程式例程
針對新人學C程序中可能遇到的一類問題
我們在學習中經常遇到這種情況:
#include<stdio.h>
void main()
{
char note[100] = "";
scanf("%s", note, 100);//本行會報錯提醒我們使用scanf_s代替scanf
}
很多帶“_s”后綴的函式是為了讓原版函式更安全,傳入一個和引數有關的大小值,避免參考到不存在的元素,有時黑客可以利用原版的不安全性黑掉系統,比如:char note[100];寫成scanf_s("%s",note,100);或scanf_s("%s",note,sizeof(note));才是正確的,有這個引數100使準確性提高,
我列舉了三個常見的例外
- [ 1] 用于呼叫的引數太少
- [ 2] 寫入位置時發生沖突
- [3 ] 檢測到無效的例外處理程式例程
在處理這三個例外時可以觀察代碼是否有這樣的錯誤:
//注釋內是錯誤寫法
scanf_s("%s", note,100);//缺少引數100 scanf_s("%s", note);
sprintf_s(temp, sizeof(temp) ,"\n收入\t%s\t\t%.2f\t\t%.2f", note, money, blance);
//缺失引數sizeof(temp)sprintf_s (temp, "\n收入\t%s\t\t%.2f\t\t%.2f", note, money, blance);
strcat_s(data,sizeof(data),temp);//同樣缺失引數 strcat_s(data,temp);
希望對同為新手的你有所幫助,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/34761.html
標籤:其他
上一篇:BUUCTF:隱藏的鑰匙
