C語言編程藝術--C語言字符串

一、字符串自然連接 
學過C的人都知道,一個字符串的長度比其包含的字符數多1,如 
char* str="string"; 
編譯器在實際分配內存空間時分配的是7個字節,最後一個字節內容爲'/0',即值爲0,用來標識字符串的結束,C語言標準庫中關於字符串的處理程序如strcat, strcpy, strcmp等都是通過它來找到字符串的結束位置,如果把這個字節修改成非零值,程序會繼續搜索,直到遇到一個值爲0的位置爲止,在定義字符串時建議定義字符串指針,如上所示,要訪問字符串通過訪問指針就行了。 
如果定義數組還必須算好字符串的長度,數組的長度必須要比字符串的長度大至少1字節,如: 
char str[7] = "String";   // OK 
char str2[3] = "str"; // 有隱患 
爲什麼說每二種情況有隱患上,而不是錯誤,如果在寫程序時注意到這上點,自行處理,而不是用庫函數中的strcat, strcpy等函數是沒有任何問題的,如果當成普通的字符串處理是容易出現問題的,但也不一定,如果恰好在你訪問裏你內存中str2起始的第四個字節,即字母r後面的一個字節內存的值剛好爲0,那麼這樣也不會出問題的,但這種情況是不可預知的。 
如果定義這樣一個字符串指針。 
char str = "This" " is" " a" " String!"; 
結果怎麼樣呢?看起來好像有語法錯誤,事實上是沒有任何問題的,它想當於: 
char str = "This is a String"; 
而不是在"This"、 " is" 、"a" 、" String!"後面分別加一個0字節。這樣也有有用的地方,比如在預處理指令中你分別在不同的地方定義了軟件的版本和軟件版本,最後輸出時輸出全部的版本,而且合成一個字符串如 
soft.h文件 
#define SOFT_VERSION "1.0.1" 
hard.h文件 
   #define HARD_VERSION "2.1" 
info.c文件 
#i nclude "soft.h" 
#i nclude "hard.h" 
... 
printf("Hard:"(HARD_VERSION)" Soft:"(SOFT_VERSION")); 
... 
這樣你只需要調用一次printf函數,會節省幾個字節的程序,特別是在嵌入式編程時資源比較緊張時非常有用。 
二、連接符 # 
三、連接符 ##
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章