2011年12月10日 星期六

C語言字串

在C程式語言裡頭,字串其實就是字元陣列,只不過在使用上有較便利的方式。
若是以陣列正規的方式來表示,寫起來多累啊……:
char S[6]={'H', 'e', 'l', 'l', 'o', '\0'};
但若是以剛剛所提到的較為便利的方式呢,那可就輕鬆多了:
char S[6]="Hello";
除此之外尚有一點必須注意到的,就是字串結尾必須要有一個「\0」字元作為結尾,不然若是使用printf( )之類的函式來輸出時,輸出的字串結尾會有一些奇怪的東東,那讀者或許會疑問第二種表示方式為何結尾處沒加「\0」字元呢?這是因為以這種方式寫的字元陣列,會自動在字串結尾處配置「\0」字元,除非說所給的陣列大小無法容納所要表示的字串,所以在使用上,我們只須注意是否配給了適當大小的陣列即可。
說明的範例裡頭除了會將這二種字串使用的方式做個示範外,也會將這二種方式在結尾時不加「\0」字元會有何結果,一併列出給讀者看看。

原始程式碼: 

代碼:

01 #include
02
03 main(void)
04 {
05  char S0[5]={'H', 'e', 'l', 'l', 'o'};
06  char S1[6]={'H', 'e', 'l', 'l', 'o', '\0'};
07  char S2[5]="Hello";
08  char S3[6]="Hello";
09
10  printf("\nS0=%s\n", S0);
11  printf("\nS1=%s\n", S1);
12  printf("\nS2=%s\n", S2);
13  printf("\nS3=%s\n", S3);
14 } 



原始程式碼說明: 
05 char S0[5]={'H', 'e', 'l', 'l', 'o'}; 
因為第5行程式碼裡頭的S0陣列不夠大,同時也沒有字串結尾字元「\0」,所以最後顯示出來的結果是不正確的,字串尾巴多了許許多多奇怪的符號。 
06 char S1[6]={'H', 'e', 'l', 'l', 'o', '\0'}; 
因為第6行程式碼裡頭的S1陣列夠大,同時也有字串結尾字元「\0」,所以最後顯示出來的結果就是正確的。 
07 char S2[5]="Hello";
08 char S3[6]="Hello";
 
這二行程式碼的情形與第5行、第6行程式碼的情形是相同的,差別僅在用法上的不同,這種字元陣列宣告的方式,會自動在字串結尾處配置「\0」字元,所以只須注意是否配給了適當大小的陣列即可。 
還有下面的另外一種寫法,這種寫法更輕鬆: 
char S3[]="Hello";

2011年12月6日 星期二

Code Complete Ch6 重點整理

1.執行變數初始化的位置盡量接近使用變數的地方