字符串实用工具
字符串实用工具
本节介绍了一些用于创建、复制和操作字符串的实用函数。
请注意,函数 g_printf()
、g_fprintf()
、g_sprintf()
、g_vprintf()
、g_vfprintf()
、g_vsprintf()
和 g_vasprintf()
在标头文件 gprintf.h
中声明,它未包含在 glib.h
中(否则使用 glib.h
会拖入 stdio.h
),因此您必须显式包含 <glib/gprintf.h>
才能使用 GLib printf()
函数。
字符串精确度缺陷
虽然您可以使用 printf()
函数来设置 UTF-8 字符串的格式,请注意 %Ns
参数的精确度解释为要打印的字节数,而不是字符数。最重要的是,printf()
函数的 GNU libc 实现具有“特性”,它检查为 %Ns
参数提供的字符串是否由当前编码中的一整个字符数组成。因此,除非您确定总处于 UTF-8 本地或知道您的文本限于 ASCII,否则避免使用 %Ns
。如果您打算为一定数量的列设置字符串的格式,那么 %Ns
并不是一种正确的解决方案,因为它无法解决宽字符(请参见 g_unichar_iswide()
)。
另请注意,有各种平台相关的 printf()
参数。GLib 提供了这些参数的平台无关宏,应该使用这些宏。一个常见的示例是 G_GUINT64_FORMAT
,应使用该宏而不是 %llu
或类似的参数来设置 64 位整数的格式。这些宏全部命名为 G_*_FORMAT
;请参见 基本类型。
通用字符串操纵
g_strdup()
g_strndup()
g_strdupv()
g_strnfill()
g_stpcpy()
g_strstr_len()
g_strrstr()
g_strrstr_len()
g_str_has_prefix()
g_str_has_suffix()
g_strcmp0()
g_str_to_ascii()
g_str_tokenize_and_fold()
g_str_match_string()
对于 C 中 GLib 的用户,还存在 g_set_str()
内联函数,用于设置字符串并处理新值的复制和旧值的释放。
字符串复制
打印
g_strdup_printf()
g_strdup_vprintf()
g_printf()
g_vprintf()
g_fprintf()
g_vfprintf()
g_sprintf()
g_vsprintf()
g_snprintf()
g_vsnprintf()
g_vasprintf()
g_printf_string_upper_bound()
ASCII
g_str_is_ascii()
g_ascii_isalnum()
g_ascii_isalpha()
g_ascii_iscntrl()
g_ascii_isdigit()
g_ascii_isgraph()
g_ascii_islower()
g_ascii_isprint()
g_ascii_ispunct()
g_ascii_isspace()
g_ascii_isupper()
g_ascii_isxdigit()
ASCII 解析
ASCII 比较
ASCII 大小写转换
ASCII 字符串操作
ASCII 数字操作
g_ascii_strtoll()
g_ascii_strtoull()
G_ASCII_DTOSTR_BUF_SIZE
g_ascii_strtod()
g_ascii_dtostr()
g_ascii_formatd()
g_strtod()
ASCII 数字解析
空格去除
查找和替换
拆分和连接
字符串数组
字符串数组生成器
GStrvBuilder
g_strv_builder_new()
g_strv_builder_ref()
g_strv_builder_unref()
g_strv_builder_add()
g_strv_builder_addv()
g_strv_builder_add_many()
g_strv_builder_take()
g_strv_builder_end()