1.scanf()的傳回值是函數成功轉換並儲存於參數中值的個數!
2./*scanf 不會讀取該行中最後一個它不需要讀取的值--分行符號'/n'
,所以該行中的剩餘部分就會留在那裡等待被讀取。這個分行符號或者其他scanf不想讀取的字元就會被解釋成下一行的開始資料。所以用下面這種方法來讀取並丟棄這些剩餘字元。
*/
int ch; /*EOF在stdio.h中定義為int,所以為了防止ch = EOF將int強轉為char,
也將ch聲明成int型*/
while((ch = getchar()) != EOF && ch != '/n'){
;
}
3.注意事項:避免越界訪問數組
*在使用下標前先檢查它們的值;(如果下標是由在鍵盤由使用者輸入的,要加上後面code)
int array[] = {0,1,2};
scanf("%d", &i);
if(i < sizeof(array)){
array[i]; //這樣再引用以i為下標的數組;
}
*在while or if 運算式中蘊含的賦值操作;(在fork一個進程時要小心用這種技巧,不要 偷懶,在while of if 前就先將fork的傳回值賦值操作。)
*始終要進行檢查,確保數組不越界;
4.strlen()的個數不包含'/0'
5.可以把字串常量賦給一個指向字元的指標,這個指標指向這些字元所儲存的地址。
但是,你不能把字串常量賦給一個字元數組,因為字串常量的直接值是一個指標,而不是字元本身。
strcpy(char *des_ptr, const char *src_ptr) //段錯誤,對指標變數賦了一個字元,而不是一個地址(指標變數)。 des_ptr = src_ptr; //right,但是只是在記憶體中只有一段字串,只是二個指標都指向了這個字串常量,不是在記憶體中的一個新的地址空間複製了一段src_ptr的字串。
strcpy(char des_ptr[], const char *src_ptr)
/***********************************/
src_ptr = strchr(src_ptr, 'a');
strcpy(char des_ptr[], const char *src_ptr); //ok!
6.修飾符,範圍
*不要在嵌套的代碼塊中出現相同的變數名!
7.避免將函數的型參和函數的局部變數重名!