GLib 定義了一個叫做 GString 的新型別,該型別相似於標準 C 中的string,但可以自動增長。字串資料以null結尾。該型別可以防止程式中的緩衝區溢出錯誤。這是一個非常重要的特性,因此我推薦使用 GString。GString 有一簡單定義:
struct GString { gchar *str; /* 指向當前以『0』結尾的字串。 */ gint len; /* 當前長度 */ }; |
如你所預想的,有許多對一個 GString 型別字串的操作。
GString *g_string_new( gchar *init ); |
這個函式構造一個 GString 型別字串,它把 init指向的字串值複製到 GString 型別字串中,傳回一個指向它的指標。建一個初始為空的 GString 型別字串則傳遞一個 NULL 作為參數。
void g_string_free( GString *string, gint free_segment ); |
該函式釋放給定的 GString 型別字串的記憶體。如果參數 free_segment 為 TRUE,也釋放其字元資料。
GString *g_string_assign( GString *lval, const gchar *rval ); |
該函式將 rval 中的字元複製到 lval 中,覆蓋 lval 中以前的內容。注意為裝下複製的字串,lval 會變長,這是和標準的 strcpy() 數不一樣的。
以下函式的功能是相當明顯的(帶有_c的版本接受一個字元而不是一個字串):
GString *g_string_truncate( GString *string, gint len ); GString *g_string_append( GString *string, gchar *val ); GString *g_string_append_c( GString *string, gchar c ); GString *g_string_prepend( GString *string, gchar *val ); GString *g_string_prepend_c( GString *string, gchar c ); void g_string_sprintf( GString *string, gchar *fmt, ...); void g_string_sprintfa ( GString *string, gchar *fmt, ... ); |
1 則留言