In GNU C ist die Funktion
vasprintf() dabei, der man eine va_list übergeben kann. Den Format-String kannst du ja dann deinen Bedürftnissen anpassen. Die Funktion ist aber weder in C99 noch in POSIX definiert, also musst du sie vielleicht aus dem GNU-libc-Source kopieren (sofern du dein Programm unter einer
GPL-kompatiblen Lizenz veröffentlichst).