glib字符串
来源:互联网 发布:网际直通车mac版 编辑:程序博客网 时间:2024/06/03 17:06
学过面向对象语言的同学一定都知道String类,一定知道这个类对字符串的操作是多麽的方便,但是c语言中是没有这个类,甚至没有类的概念,但是glib帮我们做的这个“类” GString
除了使用gchar *进行字符串处理以外,Glib还定义了一种新的数据类型: GString。
它类似于标准C的字符串类型,但是GString能够自动增长。它的字符串数据是以NULL结尾的。
这些特性可以防止程序中的缓冲溢出。这是一种非常重要的特性。
GString是一种动态字符串数据结构,提供了丰富灵活方便的API,无需手工分配内存,无需担心缓冲区溢出。
先说一下GString的结构体定义
GString
typedef struct { gchar *str; gsize len; gsize allocated_len;} GString;
这里就不用多解释了,str是字符串的指针,len是字符串长度,allocated_len是前面说的会多申请一段内存,申请的大小是由一定的算法,并不是保留一个固定值,下面的例子程序中有相关的效果,可以留意一下。
然后是glib提供的功能函数:
Synopsis
#include <glib.h> GString;GString* g_string_new (const gchar *init);GString* g_string_new_len (const gchar *init, gssize len);GString* g_string_sized_new (gsize dfl_size);GString* g_string_assign (GString *string, const gchar *rval);#define g_string_sprintf#define g_string_sprintfavoid g_string_vprintf (GString *string, const gchar *format, va_list args);void g_string_append_vprintf (GString *string, const gchar *format, va_list args);void g_string_printf (GString *string, const gchar *format, ...);void g_string_append_printf (GString *string, const gchar *format, ...);GString* g_string_append (GString *string, const gchar *val);GString* g_string_append_c (GString *string, gchar c);GString* g_string_append_unichar (GString *string, gunichar wc);GString* g_string_append_len (GString *string, const gchar *val, gssize len);GString* g_string_append_uri_escaped (GString *string, const char *unescaped, const char *reserved_chars_allowed, gboolean allow_utf8);GString* g_string_prepend (GString *string, const gchar *val);GString* g_string_prepend_c (GString *string, gchar c);GString* g_string_prepend_unichar (GString *string, gunichar wc);GString* g_string_prepend_len (GString *string, const gchar *val, gssize len);GString* g_string_insert (GString *string, gssize pos, const gchar *val);GString* g_string_insert_c (GString *string, gssize pos, gchar c);GString* g_string_insert_unichar (GString *string, gssize pos, gunichar wc);GString* g_string_insert_len (GString *string, gssize pos, const gchar *val, gssize len);GString* g_string_overwrite (GString *string, gsize pos, const gchar *val);GString* g_string_overwrite_len (GString *string, gsize pos, const gchar *val, gssize len);GString* g_string_erase (GString *string, gssize pos, gssize len);GString* g_string_truncate (GString *string, gsize len);GString* g_string_set_size (GString *string, gsize len);gchar* g_string_free (GString *string, gboolean free_segment);GString* g_string_up (GString *string);GString* g_string_down (GString *string);guint g_string_hash (const GString *str);gboolean g_string_equal (const GString *v, const GString *v2);
用下面的函数创建新的GString变量: GString *g_string_new( gchar *init ); 这个函数创建一个GString,将字符串值init复制到GString中,返回一个指向它的指针。 如果init参数是NULL,创建一个空GString。
void g_string_free( GString *string, gint free_segment ); 这个函数释放string所占据的内存。
free_segment参数是一个布尔类型变量。如果 free_segment参数是TRUE,它还释放其中的字符数据。
GString *g_string_assign( GString *lval, const gchar *rval ); 这 个函数将字符从rval复制到lval,销毁lval的原有内容。注意,如有必要, lval会被加长以容纳字符串的内容。这一点和标准的字符串复制函数strcpy( )相同。下面的函数的意义都是显而易见的。
其中以_ c结尾的函数接受一个字符,而不是字符串。
截取string字符串,生成一个长度为len的子串: GString *g_string_truncate( GString *string, gint len );
将字符串val追加在string后面,返回一个新字符串: GString *g_string_append( GString *string, gchar *val );
将字符c追加到string后面,返回一个新的字符串: GString *g_string_append_c( GString *string, gchar c );
将字符串val插入到string前面,生成一个新字符串: GString *g_string_prepend( GString *string, gchar *val );
将字符c插入到string前面,生成一个新字符串: GString *g_string_prepend_c( GString *string, gchar c );
将一个格式化的字符串写到string中,类似于标准的sprint f函数: void g_string_sprintf( GString *string, gchar *fmt, . . . ) ;
将一个格式化字符串追加到string后面,与上一个函数略有不同: void g_string_sprintfa ( GString *string, gchar *fmt, ... );
下面用一个例子程序说明几个常用函数的用法
运行结果:
- glib字符串
- glib---字符串处理函数
- glib---字符串处理函数
- glib
- GLib
- Glib
- glib
- glib
- Glib学习(5) 字符串 Strings
- GLib字符串处理@GTK+ 2.0 中文教程连载
- glib安装 glib使用手册
- 浅析GLib
- 浅析GLib
- 浅析GLib
- configure glib
- 浅析GLib
- glib 项目
- GLib介绍
- SDUT 1252 进制转换
- 状态
- Glib介绍
- RegexUtils 正则相关工具类
- test
- glib字符串
- 分别使用普通线性回归、岭回归、lasso回归预测鲍鱼年龄
- Visual Studio 遇到了异常。这可能是由某个扩展导致的
- Django系列——撰写页面
- FIR滤波器相关解释
- DialogUtils Material风格对话框工具类
- SQL SERVER 修改数据库名称(包括 db.mdf 名称的修改)
- word 中如何去掉复制的文字的底纹?
- 正定矩阵、负定矩阵、半正定矩阵、半负定矩阵