## Strings

Strings — text buffers which grow automatically as text is added

## Synopsis

    #include <glib.h>

    struct              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_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 gchar *unescaped,
                                                             const gchar *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);
    GBytes *            g_string_free_to_bytes              (GString *string);

    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);

## Description

A GString is an object that handles the memory management of a C string for you. The emphasis of GString is on text, typically UTF-8. Crucially, the "str" member of a GString is guaranteed to have a trailing nul character, and it is therefore always safe to call functions such as `strchr()` or `g_strdup()` on it.

However, a GString can also hold arbitrary binary data, because it has a "len" member, which includes any possible embedded nul characters in the data. Conceptually then, GString is like a GByteArray with the addition of many convenience methods for text, and a guaranteed nul terminator.

## Details

### struct GString

    struct GString {
      gchar  *str;
      gsize len;
      gsize allocated_len;
    };

The GString struct contains the public fields of a GString.

gchar *`str`; | points to the character data. It may move as text is added. The `str` field is null-terminated and so can be used as an ordinary C string.
gsize `len`; | contains the length of the string, not including the terminating nul byte.
gsize `allocated_len`; | the number of bytes that can be stored in the string before it needs to be reallocated. May be larger than `len`.

### g_string_new ()

    GString *           g_string_new                        (const gchar *init);

Creates a new GString, initialized with the given string.

`init` : | the initial text to copy into the string
Returns : | the new GString

### g_string_new_len ()

    GString *           g_string_new_len                    (const gchar *init,
                                                             gssize len);

Creates a new GString with `len` bytes of the `init` buffer. Because a length is provided, `init` need not be nul-terminated, and can contain embedded nul bytes.

Since this function does not stop at nul bytes, it is the caller's responsibility to ensure that `init` has at least `len` addressable bytes.

`init` : | initial contents of the string
`len` : | length of `init` to use
Returns : | a new GString

### g_string_sized_new ()

    GString *           g_string_sized_new                  (gsize dfl_size);

Creates a new GString, with enough space for `dfl_size` bytes. This is useful if you are going to add a lot of text to the string and don't want it to be reallocated too often.

`dfl_size` : | the default size of the space allocated to hold the string
Returns : | the new GString

### g_string_assign ()

    GString *           g_string_assign                     (GString *string,
                                                             const gchar *rval);

Copies the bytes from a string into a GString, destroying any previous contents. It is rather like the standard `strcpy()` function, except that you do not have to worry about having enough space to copy the string.

`string` : | the destination GString. Its current contents are destroyed.
`rval` : | the string to copy into `string`
Returns : | `string`

### g_string_sprintf

    #define             g_string_sprintf

### Warning

`g_string_sprintf` is deprecated and should not be used in newly-written code. This function has been renamed to `g_string_printf()`.

Writes a formatted string into a GString. This is similar to the standard `sprintf()` function, except that the GString buffer automatically expands to contain the results. The previous contents of the GString are destroyed.

`string` : | a GString
`format` : | the string format. See the `sprintf()` documentation
`...` : | the parameters to insert into the format string

### g_string_sprintfa

    #define             g_string_sprintfa

### Warning

`g_string_sprintfa` is deprecated and should not be used in newly-written code. This function has been renamed to `g_string_append_printf()`

Appends a formatted string onto the end of a GString. This function is similar to `g_string_sprintf()` except that the text is appended to the GString.

`string` : | a GString
`format` : | the string format. See the `sprintf()` documentation
`...` : | the parameters to insert into the format string

### g_string_vprintf ()

    void                g_string_vprintf                    (GString *string,
                                                             const gchar *format,
                                                             va_list args);

Writes a formatted string into a GString. This function is similar to `g_string_printf()` except that the arguments to the format string are passed as a va_list.

`string` : | a GString
`format` : | the string format. See the `printf()` documentation
`args` : | the parameters to insert into the format string

Since 2.14

### g_string_append_vprintf ()

    void                g_string_append_vprintf             (GString *string,
                                                             const gchar *format,
                                                             va_list args);

Appends a formatted string onto the end of a GString. This function is similar to `g_string_append_printf()` except that the arguments to the format string are passed as a va_list.

`string` : | a GString
`format` : | the string format. See the `printf()` documentation
`args` : | the list of arguments to insert in the output

Since 2.14

### g_string_printf ()

    void                g_string_printf                     (GString *string,
                                                             const gchar *format,
                                                             ...);

Writes a formatted string into a GString. This is similar to the standard `sprintf()` function, except that the GString buffer automatically expands to contain the results. The previous contents of the GString are destroyed.

`string` : | a GString
`format` : | the string format. See the `printf()` documentation
`...` : | the parameters to insert into the format string

### g_string_append_printf ()

    void                g_string_append_printf              (GString *string,
                                                             const gchar *format,
                                                             ...);

Appends a formatted string onto the end of a GString. This function is similar to `g_string_printf()` except that the text is appended to the GString.

`string` : | a GString
`format` : | the string format. See the `printf()` documentation
`...` : | the parameters to insert into the format string

### g_string_append ()

    GString *           g_string_append                     (GString *string,
                                                             const gchar *val);

Adds a string onto the end of a GString, expanding it if necessary.

`string` : | a GString
`val` : | the string to append onto the end of `string`
Returns : | `string`

### g_string_append_c ()

    GString *           g_string_append_c                   (GString *string,
                                                             gchar c);

Adds a byte onto the end of a GString, expanding it if necessary.

`string` : | a GString
`c` : | the byte to append onto the end of `string`
Returns : | `string`

### g_string_append_unichar ()

    GString *           g_string_append_unichar             (GString *string,
                                                             gunichar wc);

Converts a Unicode character into UTF-8, and appends it to the string.

`string` : | a GString
`wc` : | a Unicode character
Returns : | `string`

### g_string_append_len ()

    GString *           g_string_append_len                 (GString *string,
                                                             const gchar *val,
                                                             gssize len);

Appends `len` bytes of `val` to `string`. Because `len` is provided, `val` may contain embedded nuls and need not be nul-terminated.

Since this function does not stop at nul bytes, it is the caller's responsibility to ensure that `val` has at least `len` addressable bytes.

`string` : | a GString
`val` : | bytes to append
`len` : | number of bytes of `val` to use
Returns : | `string`

### g_string_append_uri_escaped ()

    GString *           g_string_append_uri_escaped         (GString *string,
                                                             const gchar *unescaped,
                                                             const gchar *reserved_chars_allowed,
                                                             gboolean allow_utf8);

Appends `unescaped` to `string`, escaped any characters that are reserved in URIs using URI-style escape sequences.

`string` : | a GString
`unescaped` : | a string
`reserved_chars_allowed` : | a string of reserved characters allowed to be used, or `NULL`
`allow_utf8` : | set `TRUE` if the escaped string may include UTF8 characters
Returns : | `string`

Since 2.16

### g_string_prepend ()

    GString *           g_string_prepend                    (GString *string,
                                                             const gchar *val);

Adds a string on to the start of a GString, expanding it if necessary.

`string` : | a GString
`val` : | the string to prepend on the start of `string`
Returns : | `string`

### g_string_prepend_c ()

    GString *           g_string_prepend_c                  (GString *string,
                                                             gchar c);

Adds a byte onto the start of a GString, expanding it if necessary.

`string` : | a GString
`c` : | the byte to prepend on the start of the GString
Returns : | `string`

### g_string_prepend_unichar ()

    GString *           g_string_prepend_unichar            (GString *string,
                                                             gunichar wc);

Converts a Unicode character into UTF-8, and prepends it to the string.

`string` : | a GString
`wc` : | a Unicode character
Returns : | `string`

### g_string_prepend_len ()

    GString *           g_string_prepend_len                (GString *string,
                                                             const gchar *val,
                                                             gssize len);

Prepends `len` bytes of `val` to `string`. Because `len` is provided, `val` may contain embedded nuls and need not be nul-terminated.

Since this function does not stop at nul bytes, it is the caller's responsibility to ensure that `val` has at least `len` addressable bytes.

`string` : | a GString
`val` : | bytes to prepend
`len` : | number of bytes in `val` to prepend
Returns : | `string`

### g_string_insert ()

    GString *           g_string_insert                     (GString *string,
                                                             gssize pos,
                                                             const gchar *val);

Inserts a copy of a string into a GString, expanding it if necessary.

`string` : | a GString
`pos` : | the position to insert the copy of the string
`val` : | the string to insert
Returns : | `string`

### g_string_insert_c ()

    GString *           g_string_insert_c                   (GString *string,
                                                             gssize pos,
                                                             gchar c);

Inserts a byte into a GString, expanding it if necessary.

`string` : | a GString
`pos` : | the position to insert the byte
`c` : | the byte to insert
Returns : | `string`

### g_string_insert_unichar ()

    GString *           g_string_insert_unichar             (GString *string,
                                                             gssize pos,
                                                             gunichar wc);

Converts a Unicode character into UTF-8, and insert it into the string at the given position.

`string` : | a GString
`pos` : | the position at which to insert character, or -1 to append at the end of the string
`wc` : | a Unicode character
Returns : | `string`

### g_string_insert_len ()

    GString *           g_string_insert_len                 (GString *string,
                                                             gssize pos,
                                                             const gchar *val,
                                                             gssize len);

Inserts `len` bytes of `val` into `string` at `pos`. Because `len` is provided, `val` may contain embedded nuls and need not be nul-terminated. If `pos` is -1, bytes are inserted at the end of the string.

Since this function does not stop at nul bytes, it is the caller's responsibility to ensure that `val` has at least `len` addressable bytes.

`string` : | a GString
`pos` : | position in `string` where insertion should happen, or -1 for at the end
`val` : | bytes to insert
`len` : | number of bytes of `val` to insert
Returns : | `string`

### g_string_overwrite ()

    GString *           g_string_overwrite                  (GString *string,
                                                             gsize pos,
                                                             const gchar *val);

Overwrites part of a string, lengthening it if necessary.

`string` : | a GString
`pos` : | the position at which to start overwriting
`val` : | the string that will overwrite the `string` starting at `pos`
Returns : | `string`

Since 2.14

### g_string_overwrite_len ()

    GString *           g_string_overwrite_len              (GString *string,
                                                             gsize pos,
                                                             const gchar *val,
                                                             gssize len);

Overwrites part of a string, lengthening it if necessary. This function will work with embedded nuls.

`string` : | a GString
`pos` : | the position at which to start overwriting
`val` : | the string that will overwrite the `string` starting at `pos`
`len` : | the number of bytes to write from `val`
Returns : | `string`

Since 2.14

### g_string_erase ()

    GString *           g_string_erase                      (GString *string,
                                                             gssize pos,
                                                             gssize len);

Removes `len` bytes from a GString, starting at position `pos`. The rest of the GString is shifted down to fill the gap.

`string` : | a GString
`pos` : | the position of the content to remove
`len` : | the number of bytes to remove, or -1 to remove all following bytes
Returns : | `string`

### g_string_truncate ()

    GString *           g_string_truncate                   (GString *string,
                                                             gsize len);

Cuts off the end of the GString, leaving the first `len` bytes.

`string` : | a GString
`len` : | the new size of `string`
Returns : | `string`

### g_string_set_size ()

    GString *           g_string_set_size                   (GString *string,
                                                             gsize len);

Sets the length of a GString. If the length is less than the current length, the string will be truncated. If the length is greater than the current length, the contents of the newly added area are undefined. (However, as always, string->str[string->len] will be a nul byte.)

`string` : | a GString
`len` : | the new length
Returns : | `string`

### g_string_free ()

    gchar *             g_string_free                       (GString *string,
                                                             gboolean free_segment);

Frees the memory allocated for the GString. If `free_segment` is `TRUE` it also frees the character data. If it's `FALSE`, the caller gains ownership of the buffer and must free it after use with `g_free()`.

`string` : | a GString
`free_segment` : | if `TRUE`, the actual character data is freed as well
Returns : | the character data of `string` (i.e. `NULL` if `free_segment` is `TRUE`)

### g_string_free_to_bytes ()

    GBytes *            g_string_free_to_bytes              (GString *string);

Transfers ownership of the contents of `string` to a newly allocated GBytes. The GString structure itself is deallocated, and it is therefore invalid to use `string` after invoking this function.

Note that while GString ensures that its buffer always has a trailing nul character (not reflected in its "len"), the returned GBytes does not include this extra nul; i.e. it has length exactly equal to the "len" member.

`string` : | a GString. [transfer full]
Returns : | A newly allocated GBytes containing contents of `string`; `string` itself is freed

Since 2.34

### g_string_up ()

    GString *           g_string_up                         (GString *string);

### Warning

`g_string_up` has been deprecated since version 2.2 and should not be used in newly-written code. This function uses the locale-specific `toupper()` function, which is almost never the right thing. Use `g_string_ascii_up()` or `g_utf8_strup()` instead.

Converts a GString to uppercase.

`string` : | a GString
Returns : | `string`

### g_string_down ()

    GString *           g_string_down                       (GString *string);

### Warning

`g_string_down` has been deprecated since version 2.2 and should not be used in newly-written code. This function uses the locale-specific `tolower()` function, which is almost never the right thing. Use `g_string_ascii_down()` or `g_utf8_strdown()` instead.

Converts a GString to lowercase.

`string` : | a GString
Returns : | the GString

### g_string_hash ()

    guint               g_string_hash                       (const GString *str);

Creates a hash code for `str`; for use with GHashTable.

`str` : | a string to hash
Returns : | hash code for `str`

### g_string_equal ()

    gboolean            g_string_equal                      (const GString *v,
                                                             const GString *v2);

Compares two strings for equality, returning `TRUE` if they are equal. For use with GHashTable.

`v` : | a GString
`v2` : | another GString
Returns : | `TRUE` if the strings are the same length and contain the same bytes