顯示具有 C and C plus plus 標籤的文章。 顯示所有文章
顯示具有 C and C plus plus 標籤的文章。 顯示所有文章

2013年8月13日 星期二

Boundary Test (Error Handling)

評估資料來源,是否確定一定不會有例外資料進來,如果不會有,就不用檢查,如果資料來源有可能超乎預期,就要檢查。

也或者說提供別人呼叫的 API 都要檢查進來的資料最保險。

1. Web UI
2. CGI (HTTP 的 Request 不一定來自瀏覽器,也可以擷取封包自己塞資料)
3. API

處理字串和記憶體時的保護性寫法

當我們在處理字串或記憶體時盡量使用保護性的寫法,可以減少 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

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 編譯成組語的結果,我們也可以透過這種檢視方式來判斷執行的效率