结构体
GLib字符串
说明 [src]
struct GString {
gchar* str;
gsize len;
gsize allocated_len;
}
GString
是一个处理 C 字符串内存管理的对象。
GString
强调的是文本,通常是 UTF-8。至关重要的是,GString
的“str”成员保证拥有一个尾随空字符,因此,在上面调用 strchr()
或 strdup()
等函数始终是安全的。
但是,GString
也可以包含任意二进制数据,因为它有一个“len”成员,其中包含数据可能嵌入的任何空字符。因此,从概念上来说,GString
就像一个 GByteArray
,另外还为文本提供了许多便捷的方法,并保证有一个空终止符。
结构成员
str
指向字符数据。随着添加文本,它可能会移动。
str
字段以 null 结尾,因此可以用作普通 C 字符串。len
包含字符串的长度,不包括终止的空字节。
allocated_len
在需要重新分配字符串之前,可以存储在字符串中的字节数。可能大于
len
。
实例方法
g_string_append_vprintf
将格式化字符串追加到 GString
的末尾。此函数类似于 g_string_append_printf()
,除了格式字符串的参数作为 va_list 传递。
since: 2.14
g_string_free
释放为 GString
分配的内存。如果 free_segment
为 TRUE
,它还将释放字符数据。如果它为 FALSE
,则调用者获得缓冲区的拥有权,并且必须在使用 g_free() 后释放它。
g_string_free_to_bytes
将 string
内容的所有权转移到新分配的 GBytes
。 GString
结构本身被释放,因此调用此函数后使用 string
是无效的。
since: 2.34
g_string_replace
用字符串 replace
替换 GString
中的字符串 find
最多 limit
次。如果 GString
中 find
的实例数量少于 limit
,则所有实例都将被替换。如果 limit
为 0
,则 find
的所有实例都将被替换。
自:2.68
g_string_set_size
设置 GString
的长度。如果长度小于当前长度,则字符串将被截断。如果长度大于当前长度,则新添加区域的内容未定义。(但是,像往常一样,string->str[string->len] 将为 null 字节)。