| 在處理C的陣列時,您必須處理陣列長度的問題,您可以使用GLib的GArray,並搭配各個所提供的函式,在使用陣列上會更為方便,GArray的定義如下: typedef struct {
gchar *data; guint len; } GArray; 您有兩種建立GArray的方式: GArray* g_array_sized_new(gboolean zero_terminated,
g_array_sized_new()的第一個參數
zero_terminated設定為TRUE的話,會加入最後一個額外元素,全部的位元都設定為0,clear_設定為TRUE的話,陣列的全部元素會
設定為0,element_size則是用來設定每個元素的長度,reserved_size則是用以設定陣列的長度,g_array_new()則是巨
集定義的簡化版本,預設長度為0,若加入新的元素,則自動增加陣列長度。gboolean clear_, guint element_size, guint reserved_size); GArray* g_array_new(gboolean zero_terminated, gboolean clear_, guint element_size); 要加入新的元素,可以使用g_array_append_val()函式,要依索引取出元素,則可以使用g_array_index()函式,下面這個程式是個簡單的示範:
#include <glib.h> 執行結果如下:
搭配GArray的函式還有g_array_remove_index()、g_array_sort()等,您可以參考 Arrays 的說明。 與GArray類似的是GPtrArray,只不過GArray儲存的是數值(若是structs,則會複製至GArray中),而GPtrArray儲存的是指標,GPtrArray的定義如下: typedef struct {
gpointer *pdata; guint len; } GPtrArray; 舉個例子來說,若要儲存GString的指標,則可以如下所示:
#include <glib.h> 執行結果如下所示:
GByteArray則允許您儲存guint8的資料,用於儲存位元組資料,為GArray的一個簡化形式,其定義如下: typedef struct {
guint8 *data; guint len; } GByteArray; |