02 WIndows程式設計 危險的sizeof

2022-03-19 06:07:44 字數 1490 閱讀 7722

c語言中,對 sizeof() 的處理都是在編譯階段進行。

下面**,注意可變引數是怎麼使用的

#include#include

int messageboxprint(char *szformat, ...);

int fun(char

ch);

int winmain(hinstance hinst, hinstance tmp, lpstr strcmd, int

nshow)

int messageboxprint(char *szformat, ...)

int fun(char

ch)

view code

sizeof在fun函式種計算的是指標ch的長度,32位os下恒為4

sizeof計算字串含要看在什麼位置,寫完**時很難預估風險,最好使用strlen

修改如下

#include#include

int messageboxprint(char *szformat, ...);

int fun(char

ch);

int winmain(hinstance hinst, hinstance tmp, lpstr strcmd, int

nshow)

int messageboxprint(char *szformat, ...)

int fun(char

ch)

view code

這時還有個問題,由於winmain裡面str沒有初始化,strlen計算長度的時候,長度是未知的。因為他要一直找到\0才結束,所以strlen的時候長度可能大於1024,可能等於1024,也可能小於1024。

strlen()求的是長度,針對的物件是字串,而sizeof()求的是大小,針對的是型別,首先要明確的乙個概念是,strlen()是函式,而sizeof()表面看起來是函式,其本質是關鍵字。

printf函式原型

extern int printf(const char *format,...);

vsnprintf函式

標頭檔案:#include  

函式原型:int vsnprintf(char *str, size_t size, const char *format, va_list ap);

函式說明:將可變引數格式化輸出到乙個字元陣列

引數:str輸出到的陣列,size指定大小,防止越界,format格式化引數,ap可變引數列表函式用法

vfprintf()函式

標頭檔案:#include  

函式原型: int vfprintf(file *stream, const char *format, va_list arg);

函式說明:fprintf()會根據引數format字串來轉換並格式化資料,然後將結果輸出到引數stream指定的檔案中,直到出現字串結束(『\0』)為止。

2010最危險的程式設計錯誤

歷史上第乙個bug 網路無處不在的今天,安全問題日益嚴峻,攻擊事件層出不窮,應該說,軟體系統中 存在安全漏洞是主要的禍因之一。而這實際上反映了軟體開發人員在 程式設計的安全性方面缺乏必要的培訓和常識。由cws 美國國土安全部下屬的軟體保證專案 與sans 權威安全培訓組織 聯合編制的最危險的25個程...

2010最危險的程式設計錯誤

歷史上第乙個bug 網路無處不在的今天,安全問題日益嚴峻,攻擊事件層出不窮,應該說,軟體系統中 存在安全漏洞是主要的禍因之一。而這實際上反映了軟體開發人員在程式設計的安全性方面缺乏必要的培訓和常識。由cws 美國國土安全部下屬的軟體保證專案 與sans 權威安全培訓組織 聯合編制的最危險的25個程式...

2010最危險的程式設計錯誤

歷史上第乙個bug 網路無處不在的今天,安全問題日益嚴峻,攻擊事件層出不窮,應該說,軟體系統中 存在安全漏洞是主要的禍因之一。而這實際上反映了軟體開發人員在程式設計的安全性方面缺乏必要的培訓和常識。由cws 美國國土安全部下屬的軟體保證專案 與sans 權威安全培訓組織 聯合編制的最危險的25個程式...