實現目的
我們在用C語言編寫程序時,經常會遇到使用字符串數組的情況,這種數組的特點是, 數組中的每個元素都是一個字符串,但每個字符串的長度卻不相同。如果你使用C++語言進行編程的話,實現起來相對比較簡單,只需直接選擇標準模板庫的字符串string類,在代碼中定義該類的一個數組即可實現。現在的問題是,在純C語言中如何定義這樣的一個字符串數組呢?
如對於下面的一個字符串數組:
str = {
「I love C.」,
「I love C++.」,
「I love JAVA.」,
「I love Python.」,
「I love LabVIEW.」
}
下面給出C語言中的兩種定義方法。
方法1:定義一個char類型的二維數組
這種方法是通過定義一個char類型的二維數組實現,通過二維數組的行索引可得到數組中的每個字符串,列的大小限定了每個字符串所能包含的最大字符個數,所以採用這種定義方式時,列的大小必須不能小於數組所有字符串的最大長度。如對於上面的數組,C語言的定義代碼如下:
在取該數組的每個字符串時,直接對行索引即可。
方法2:定義一個指向char類型的指針數組
這種方法是通過定義一個指向char類型的指針數組實現,數組中的每個元素都是一個指針,通過該指針可得到數組中的每個字符串。如對於上面的數組,C語言的定義代碼如下:
兩種方法對比
上面的兩種方法都可以實現我們的目的,但在內存的佔用上兩種方法不同。第1種方法定義了一個5行20列的二維數組,即每個字符串所佔的字節長度都為20個,所以共需要佔用100個字節,而第2種方法是定義的指針數組,每個指針指向的字符串佔用的字節長度是其實際長度,所以其總的長度肯定小於100個字節。綜合來講,第1種方法相對於第2種方法,造成了存儲空間的浪費情況。
字符串數組定義及使用的完整測試代碼
下面給出這個例子的完整的C語言測試代碼,如下圖所示:
程序運行結果如下圖所示:
總結
一般在C語言中定義字符串的數組時,推薦使用第2種方法,特別是對於單片機、嵌入式等方面的程序開發時,可以充分利用有限的硬體資源,避免存儲空間的浪費。