新开传奇网站刚开一秒第一区做门户网站的市场价格
新开传奇网站刚开一秒第一区,做门户网站的市场价格,鲜花网站建设规划,百度关键词查询学过面向对象语言的同学一定都知道String类#xff0c;一定知道这个类对字符串的操作是多麽的方便#xff0c;但是c语言中是没有这个类#xff0c;甚至没有类的概念#xff0c;但是glib帮我们做的这个“类” GString 除了使用gchar *进行字符串处理以外#xff0c;Glib还… 学过面向对象语言的同学一定都知道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.hGString;
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_sprintfa
void 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, ... ); 下面用一个例子程序说明几个常用函数的用法 [cpp] view plain copy #include glib.h int main(int argc,char **argv) { // GString* g_string_new(const gchar *init); 根据所给的字符串建立适当长度的GString并自动创建适当长度的allocated_len创建的时候将字符串init复制到GString中。 GString *string g_string_new(Justin); g_print(g_string_new(\Justin\); len %d, allocated_len %d\n, string-len, string-allocated_len); // 若不使用GString时可以使用g_string_free()释放第二个参数如果为TRUE会连同字符串也是放掉。 g_string_free(string, TRUE); // GString* g_string_new_len(const gchar *init, gssize len); 指定len来建立GString因为是自行制定的长度所以len必须超过init的长度。 string g_string_new_len(Justin, 32); g_print(g_string_new_len(\Justin\, 32); len %d, allocated_len %d\n, string-len, string-allocated_len); g_string_free(string, TRUE); // GString* g_string_sized_new(gsize dfl_size); 指定allocated_len建立GString函数会根据需要的长度值自动分配长度也就是不一定会分配设置的长度但一定会比设定的长度大。 string g_string_sized_new(32); g_printf(g_string_sized_new(32); len %d, allocated_len %d\n, string-len, string-allocated_len); g_string_free(string, TRUE); GString *tg_string_new(Hello Laomeng.); GString *sg_string_new(Hello Laoli.); // g_string_equal() 判断两个GString的字符串内容是否相同 if(g_string_equal(s,t)) { g_print(g_string_equal(s,t); %s %s\n,s-str,t-str); } else { g_print(g_string_equal(s,t); %s ! %s\n,s-str,t-str); } g_string_free(s, TRUE); g_string_free(t, TRUE); string g_string_new(first str!); // GString* g_string_append (GString *string,const gchar *val); 在字符串string后面追加字符串val g_string_append(string, second str!); g_print(g_string_append(string, \second str!\); %s\n, string-str); // GString* g_string_truncate(GString *string,gsize len); 截断字符串保留前len个字符 g_string_truncate(string,5); g_print(g_string_truncate(string,5); string: %s, len %d, allocated_len %d\n,string-str, string-len , string-allocated_len); // GString* g_string_prepend (GString *string,const gchar *val); 在字符串string前面追加字符串val g_string_prepend(string, prepend str!); g_print(g_string_prepend(string, \prepend str!\); string:%s\n, string-str); // GString* g_string_insert (GString *string,gssize pos,const gchar *val); 将字符串插入到pos处 g_string_insert(string, sizeof(prepend str!)-1 , insert str!); g_print(g_string_insert(string, sizeof(\prepend str!\) , \insert str!\); %s\n, string-str); // void g_string_printf(GString *string, const gchar *format, ...); 格式化一个字符串和sprintf用法一样只是赋值给一个GStringstring里面以前的数据被销毁了 g_string_printf(string,%d %d %d, 100, 200, 100200); g_print(g_string_printf(); GString: %s, len %d, allocated_len %d \n,string-str, string-len , string-allocated_len); // void g_string_append_printf(GString *string, const gchar *format, ...); 格式化一个字符串和g_string_printf很相似只是不销毁string里面的数据而是在后面追加 g_string_append_printf(string,\t %d * %d %d, 100,200,100*200); g_print(g_string_append_printf(); GString: %s, len %d, allocated_len %d \n,string-str, string-len , string-allocated_len); g_string_free(string,TRUE); string g_string_new(abcdefgABCDEFG); // g_string_ascii_up()或g_utf8_strup() 转换GString中的字符串为小写 g_string_ascii_up(string); g_printf(Upper: %s\n, string-str); // g_string_ascii_down()或g_utf8_strdown()转换GString中的字符串为大写 g_string_ascii_down(string); g_printf(Down: %s\n, string-str); g_string_free(string,TRUE); return 0; } 运行结果 [plain] view plain copy linuxubuntu:~/16021/glibdemo$ gcc -o gstring gstring.c -lglib-2.0 linuxubuntu:~/16021/glibdemo$ ./gstring g_string_new(Justin); len 6, allocated_len 16 g_string_new_len(Justin, 32); len 32, allocated_len 64 g_string_sized_new(32); len 0, allocated_len 64 g_string_equal(s,t); Hello Laoli. ! Hello Laomeng. g_string_append(string, second str!); first str!second str! g_string_truncate(string,5); string: first, len 5, allocated_len 32 g_string_prepend(string, prepend str!); string:prepend str!first g_string_insert(string, sizeof(prepend str!) , insert str!); prepend str!insert str!first g_string_printf(); GString: 100 200 300, len 15, allocated_len 32 g_string_append_printf(); GString: 100 200 300 100 * 200 20000, len 34, allocated_len 64 Upper: ABCDEFGABCDEFG Down: abcdefgabcdefg linuxubuntu:~/16021/glibdemo$
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92560.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!