評估資料來源,是否確定一定不會有例外資料進來,如果不會有,就不用檢查,如果資料來源有可能超乎預期,就要檢查。
也或者說提供別人呼叫的 API 都要檢查進來的資料最保險。
1. Web UI
2. CGI (HTTP 的 Request 不一定來自瀏覽器,也可以擷取封包自己塞資料)
3. API
2013年8月13日 星期二
處理字串和記憶體時的保護性寫法
當我們在處理字串或記憶體時盡量使用保護性的寫法,可以減少 Overflow 或 Overlap 的機會。
1. 使用可以掌握資料長度的寫法
memcpy
strncpy
strncat
snprintf
2. 使用可以暫存資料位址的寫法
strtok_r
3. 檢查字串是否包含 '\0'
2012年8月14日 星期二
Difference between parameter and argument
Parameter:
Parameter 指的是函數的原型 (Prototype) 與定義 (Definition) 中規定必須接到的參數 (Parameter) 資料格式 (Format)。
Argument:
Argument 指的是函數呼叫中 (Function call) 所傳遞的引數 (Argument)
Reference:
http://job.achi.idv.tw/2010/03/31/argument-vs-parameter-%E7%9A%84%E7%BF%BB%E8%AD%AF/
http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_056.HTM
http://en.wikipedia.org/wiki/Parameter_%28computer_programming%29
Parameter 指的是函數的原型 (Prototype) 與定義 (Definition) 中規定必須接到的參數 (Parameter) 資料格式 (Format)。
Argument:
Argument 指的是函數呼叫中 (Function call) 所傳遞的引數 (Argument)
Reference:
http://job.achi.idv.tw/2010/03/31/argument-vs-parameter-%E7%9A%84%E7%BF%BB%E8%AD%AF/
http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_056.HTM
http://en.wikipedia.org/wiki/Parameter_%28computer_programming%29
2012年8月13日 星期一
C 指標整理
A.
比較三種宣告之間的差異
int
p1;
|
p1
為一個整數變數,變數內容為一個整數
|
int
*p2;
|
p2
為一個指標變數,變數內容為一個指標,指向一個儲存整數的空間
|
int
**p3;
|
p3
為一個指標變數,變數內容為一個指標,指向另一個儲存指標的空間。另一個指標指向儲存整數的空間。
|
int
*p4( );
|
p4
為一個函數指標,指向一個函數
|
B. 比較六種宣告之間的差異
char
p1;
|
p1
為一個字元型態的變數,變數內容為一個字元
|
char
*p2;
|
p2
為一個指標變數,指標指向一個儲存字元的空間
|
char
**p3;
|
p3
為一個指標變數,變數內容為一個指標,指向另一個儲存指標的空間。另一個指標指向儲存字元的空間
|
(char
*)p4[20];
|
p4
是一個陣列儲存 20 個字元型態的指標
|
char
(*p5)[20];
|
p5
是一個指標變數,指向一個
20 個字元大小的空間
|
char
(*p6)[20][40];
|
p6
是一個指標變數,指向一個
20*40 字元大小的空間
|
C. 比較三種宣告之間的差異
char
const *p1;
const
char *p2;
char
* const p3;
1.
char (Type) 與 const
(Qualifier) 為等價關係,順序不影響宣告代表的意義,
所以 char const 與 const char 的意義是相同的。
2. 閱讀的的技巧:先將 Type 部分省略
const
*p1
|
p1為一個指標變數,指標變數的內容 (指標) 所指向的值不可修改
|
const
*p2
|
p2
為一個指標變數,指標變數的內容 (指標) 所指向的值不可修改
|
*
const p3
|
p3
為一個指標變數,指標變數的內容 (指標) 不可修改
|
2012年7月10日 星期二
函示呼叫使用結構參數或指標參數的比較
結構參數
|
指標參數
|
|
效率
|
速度較慢:需要複製完整的資料來產生複本
|
速度較快:只需複製指標
|
空間
|
佔用空間較多:每次呼叫都需要產生複本,每個複本都需要使用完整的結構所需的空間,且結構中的成員未必都被使用到
|
佔用空間較少:只需產生指標的複本
|
相容性
|
較低:因為舊版的編譯器不一定支援結構參數的呼叫
|
較高:舊版編譯器即支援指標參數的呼叫
|
資料保護
|
較高:因為會產生資料複本,所以不會直接存取到原始資料
|
較低:會直接存取到原始資料,但可以用 const
的方式避免非必要的修改
|
2012年7月6日 星期五
GCC option -E and -S
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
"-S" 可以讓我們看到 code 編譯成組語的結果,我們也可以透過這種檢視方式來判斷執行的效率
-S Compile only; do not assemble or link
"-S" 可以讓我們看到 code 編譯成組語的結果,我們也可以透過這種檢視方式來判斷執行的效率
訂閱:
文章 (Atom)