In a response elsewhere, I found the following snippet:
In general it is nicer in C to have the caller allocate memory, not the callee - hence why str
I prefer the GLib style (the 1st you mentioned). For me choosing this style makes it more object oriented like. Your methods take care of creating and destroying the struct, so you don't have to fight with the internals of a structure. This aproach leads your code to have less errors as well.
A GString example:
GString *s;
s = g_string_new();
// Not in this case, but sometimes you can
// find this:
if (s == NULL)
printf("Error creating the object!");