Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Glib String Handling

Posted on July 27, 2012

glib provides a number of functions for string handling; some are unique to glib, and some solve portability concerns. They all interoperate nicely with the glib memory allocation routines.

For those interested in a better string than gchar*, there’s also a GString type. It isn’t covered in this book, but documentation is available at http://www.gtk.org/.

[code lang=”cpp”]#include <glib.h>

gint g_snprintf(gchar* buf, gulong n, const gchar* format, …);
gint g_strcasecmp(const gchar* s1, const gchar* s2);
gint g_strncasecmp(const gchar* s1, const gchar* s2, guint n);
[/code]
Figure 2-7. Portability Wrappers

One of the annoying things about C is that it provides the crash-causing, security- hole-creating, generally evil sprintf(), but the relatively safe and widely implemented snprintf() is a vendor extension. g_snprintf() wraps native snprintf() on platforms that have it, and provides an implementation on those that don’t. So you can say goodbye to sprintf() forever. Even better: classically, snprintf() does not guarantee that it will NULL-terminate the buffer it fills. g_snprintf() does.

g_strcasecmp() and g_strncasecmp() perform a case-insensitive comparison of two strings, optionally with a maximum length. strcasecmp() is available on many platforms but not universally, so using glib instead is advisable.

The functions in Figure 2-8 modify a string in-place: the first two convert the string to lowercase or uppercase, respectively, while g_strreverse() reverses its characters. g_strchug() and g_strchomp() “chug” the string (remove leading spaces), or “chomp” it (remove trailing spaces). These last two return the string, in addition to modifying it in-place; in some cases it may be convenient to use the return value. There is a macro, g_strstrip(), which combines both functions to remove both leading and trailing spaces; it is used just as the individual functions are.

[code lang=”cpp”]
#include <glib.h>
void g_strdown(gchar* string);
void g_strup(gchar* string);
void g_strreverse(gchar* string);
gchar* g_strchug(gchar* string);
gchar* g_strchomp(gchar* string);
[/code]
Figure 2-8. In-place string modifications

Figure 2-9 shows a few more semi-standard functions glib wraps. g_strtod is like strtod()—it converts string nptr to a double—with the exception that it will also at- tempt to convert the double in the “C” locale if it fails to convert it in the user ’s default locale. *endptr is set to the first unconverted character, i.e. any text after the number representation. If conversion fails, *endptr is set to nptr. endptr may be NULL, causing it to be ignored.

g_strerror() and g_strsignal() are like their non-g_ equivalents, but portable. (They return a string representation for an errno or a signal number.)
[code lang=”cpp”]
#include <glib.h>

gdouble g_strtod(const gchar* nptr, gchar** endptr);
gchar* g_strerror(gint errnum);
gchar* g_strsignal(gint signum);
[/code]
Figure 2-9. String Conversions

Figure 2-10 shows glib’s rich array of functions for allocating strings. Unsurprisingly, g_strdup() and g_strndup() produce an allocated copy of str or the first n characters of str. For consistency with the glib memory allocation functions, they return NULL if passed a NULL pointer. The printf() variants return a formatted string. g_strescape escapes any \ characters in its argument by inserting another \ before them, returning the escaped string. g_strnfill() returns a string of size length filled with fill_char. g_strdup_printf() deserves a special mention; it is a simpler way to handle this common piece of code:
[code lang=”cpp”]
gchar* str = g_malloc(256);
g_snprintf(str, 256, "%d printf-style %s", 1, "format");
[/code]

Instead you could say this, and avoid having to figure out the proper length of the buffer to boot:
[code lang=”cpp”]
gchar* str = g_strdup_printf("%d printf-style %s", 1, "format");
[/code]

[code lang=”cpp”]
#include <glib.h>
gchar* g_strdup(const gchar* str);
gchar* g_strndup(const gchar* format, guint n);
gchar* g_strdup_printf(const gchar* format, …);
gchar* g_strdup_vprintf(const gchar* format, va_list args);
gchar* g_strescape(gchar* string);
gchar* g_strnfill(guint length, gchar fill_char);
[/code]
Figure 2-10. Allocating Strings

glib provides some convenient functions for concatenating strings, shown in Figure
2-11. g_strconcat() returns a newly-allocated string created by concatenating each
of the strings in the argument list. The last argument must be NULL, so g_strconcat()
knows when to stop. g_strjoin() is similar, but separator is inserted between each
string. If separator is NULL, no separator is used.

[code lang=”cpp”]
#include <glib.h>

gchar* g_strconcat(const gchar* string1, …);
gchar* g_strjoin(const gchar* separator, …);
[/code]
Figure 2-11. Concatenating strings

Finally, Figure 2-12 summarizes a few routines which manipulate NULL-terminated arrays of strings. g_strsplit() breaks string at each delimiter, returning a newly- allocated array. g_strjoinv() concatenates each string in the array with an optional separator, returning an allocated string. g_strfreev() frees each string in the array and then the array itself.
[code lang=”cpp”]
#include <glib.h>

gchar** g_strsplit(const gchar* string, const gchar* delimiter, gint max_tokens);
gchar* g_strjoinv(const gchar* separator, gchar** str_array);
void g_strfreev(gchar** str_array);
[/code]
Figure 2-12. Manipulating NULL-terminated string vectors

Source: Havoc Pennington. 1999. GTK Gnome Application Development. New York: New Riders Publishing

Terbaru

  • Inilah Syarat Terbaru dan Cara Daftar Bansos PKH-BPNT 2026 Lewat HP!
  • Inilah Trik Hubungkan Telegram ke WaIDN Biar Saldo Ngalir Terus!
  • Caranya Mengatasi Kode Verifikasi PayPal yang Nggak Pernah Nyampe di HP
  • Inilah Cara Cek Pencairan KJP Plus Januari 2026 Biar Nggak Bingung Lagi
  • Inilah Cara Cek Dana PIP yang Cair Senin 19 Januari 2026 Lewat HP!
  • Ingin Kuliah Gratis di 2026? Ini Cara Daftar KIP Kuliah via HP dan Syarat Lengkapnya!
  • Inilah Cara Cek Status KIS Bansos Aktif Secara Instan Lewat Smartphone Kamu!
  • Inilah Cara Cek NIK KTP Penerima Bansos PKH dan BPNT Januari 2026 yang Paling Gampang!
  • Ini Trik Ampuh Mengatasi Kode Verifikasi PayPal yang Nggak Kunjung Masuk!
  • Sering Gagal Transaksi? Ini Cara Mengatasi Kode FP2769 di BRImo yang Bikin Pusing!
  • Layar Oppo Muncul Error Hubungan Baterai? Gini Cara Beresinnya Sampai Tuntas!
  • Cara Munculin Menu Hadiah Melolo di iPhone
  • Inilah Cara Main Melolo Drama Biar Gak Boros Kuota dan Saldo Cair Terus!
  • Ini Trik Rahasia Cara Memunculkan Potongan Harga TikTok Shop yang Nggak Muncul di Akun Kalian!
  • Threads Ternyata Sudah Lebih Rame dari X di Android
  • Bocoran Terbaru Pixel 10a: Tanggal Rilis Lebih Awal dan Harganya Nggak Jadi Naik?
  • Inilah Cara Main Aplikasi Layla Biar Dapat Teman dan Cuan Sekaligus!
  • Apa itu Apple Creator Studio?
  • Inilah Alasan Kenapa Tidak Bisa Melihat Status WA Padahal Tidak Diprivasi dan Trik Mengatasinya!
  • Lupa Email Akun Higgs Domino? Ini Cara Mengatasinya
  • Apa itu WhatsApp Aero? Aman atau Tidak + Cara Downloadnya
  • Inilah Kenapa Paket JNE Muncul Status Nobody At Home dan Cara Mengatasinya Biar Nggak Panik!
  • Gagal Aktivasi BSI Mobile? Inilah Arti Pesan Error 53 Saving Account Not Registered dan Solusinya
  • Cara Cuan dari Hobi Baca Novel/Komik Online
  • Hp Vivo Kalian Muncul Notif Data Spasial Sistem Rusak? Begini Trik Mengatasinya Sampai Tuntas!
  • Cara Buat Link Ujian Mencintai Diam-Diam Google Form, Tes Seberapa Besar Perasaan Kalian ke Crush!
  • Ini Penjelasan Mengenai Cara Mengubah Dosa Menjadi Diamond Game FF ML dan Saldo Shopeepay yang Sedang Viral
  • Trik Supaya Bisa Dapat Potongan Harga Rp100 di TikTok Tanpa Harus Reset HP!
  • Cara Input Bantuan IFP dan Laptop di Dapodik 2026.B, Aset Sekolah Aman
  • Cara Cairkan Rp170.000 dari Clear Blast, Terbukti Membayar ke DANA Tanpa Ribet!
  • Apa Itu ErrTraffic? Mengenal Platform ClickFix yang Bikin Website Jadi ‘Error’ Palsu
  • What is Reflex Framework? A Full-stack Python Framework
  • CloudFlare Acquired AstroJS!
  • How to Completely Remove AI Features from Windows 11 Explained
  • How to AI Fine-Tuning with a New Red Hat’s New Modular Tools
  • Cara Menggunakan SAM3D untuk Segmentasi dan Pembuatan Model 3D dari Teks
  • Cara Membuat AI Agent Super Cerdas dengan DeepAgents dan LangGraph
  • Perbedaan GPU vs TPU, Mana yang Terbaik
  • Tutorial Langfuse: Pantau & Optimasi Aplikasi LLM
  • Begini Teknik KV Caching dan Hemat Memori GPU saat Menjalankan LLM
  • Apa Itu ErrTraffic? Mengenal Platform ClickFix yang Bikin Website Jadi ‘Error’ Palsu
  • Ini Kronologi Hacking ESA (European Space Agency) 2025
  • Apa itu Zoom Stealer? Ini Definisi dan Bahaya Tersembunyi di Balik Ekstensi Browser Kalian
  • Apa itu Skandal BlackCat Ransomware?
  • Apa itu ToneShell? Backdoor atau Malware Biasa?
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV

©2026 emka.web.id | Design: Newspaperly WordPress Theme