在處理C的陣列時,您必須處理陣列長度的問題,您可以使用GLib的GArray,並搭配各個所提供的函式,在使用陣列上會更為方便,GArray的定義如下:
typedef struct {
gchar *data;
guint len;
} GArray;
      
      gchar *data;
guint len;
} GArray;
您有兩種建立GArray的方式:
GArray* g_array_sized_new(gboolean zero_terminated,
gboolean clear_,
guint element_size,
guint reserved_size);
      
GArray* g_array_new(gboolean zero_terminated,
gboolean clear_,
guint element_size);
      
      
      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()函式,下面這個程式是個簡單的示範:
- garray_demo.c
#include <glib.h>
int main(int argc, char *argv[]) {
    GArray *garray;
    gint i;
    garray = g_array_new(FALSE, FALSE, sizeof(gint));
      
    for (i = 0; i < 5; i++) {
        g_array_append_val(garray, i);
    }
    for (i = 0; i < 5; i++) {
        g_printf("%d\n", g_array_index(garray, gint, i));
    }
    g_array_free (garray, TRUE);
     
    return 0;
}執行結果如下:
0
1
2
3
4
      
      1
2
3
4
搭配GArray的函式還有g_array_remove_index()、g_array_sort()等,您可以參考 Arrays 的說明。
與GArray類似的是GPtrArray,只不過GArray儲存的是數值(若是structs,則會複製至GArray中),而GPtrArray儲存的是指標,GPtrArray的定義如下:
typedef struct {
gpointer *pdata;
guint len;
} GPtrArray;
      
      gpointer *pdata;
guint len;
} GPtrArray;
舉個例子來說,若要儲存GString的指標,則可以如下所示:
- gptrarray_demo.c
#include <glib.h>
int main(int argc, char *argv[]) {
    GPtrArray *array;
    gint i;
    GString *text;
    
    array = g_ptr_array_new();
    for (i = 0; i < 5; i++) {
        text = g_string_sized_new(5);
        g_string_printf(text, "TEST %d", i);
        g_ptr_array_add(array, text);
    }
    for (i = 0; i < 5; i++) {
        text = g_ptr_array_index(array, i);
        g_printf("%s\n", text->str);
    }
    
    g_ptr_array_free(array, TRUE);
    
    return 0;
}執行結果如下所示:
TEST 0
TEST 1
TEST 2
TEST 3
TEST 4
      
      TEST 1
TEST 2
TEST 3
TEST 4
GByteArray則允許您儲存guint8的資料,用於儲存位元組資料,為GArray的一個簡化形式,其定義如下:
typedef struct {
guint8 *data;
guint len;
} GByteArray;
      
      guint8 *data;
guint len;
} GByteArray;

