String with dinamicaly growing buffer
String is where buffer overflow always occur. GLIB supports doing this much more easily:
/* portable asprintf() */
char *str = g_strdup_printf("string%s%d", str_variable, int_variable);
Or if you wanted a modifyable buffer:
GString *str = g_string_new(NULL);
g_string_append(str, "string");
g_string_append(str, str_variable);
g_string_sprintfa(str, "%d", int_variable); /* no g_string_append_int() */