Namespaces
Variants

asprintf, aswprintf, vasprintf, vaswprintf

From cppreference.net
Definiert in Header <stdio.h>
int asprintf ( char ** restrict strp, const char * restrict fmt, ... ) ;
(1) (Dynamic Memory TR)
int aswprintf ( wchar_t ** restrict strp, const wchar_t * restrict fmt, ... ) ;
(2) (Dynamic Memory TR)
int vasprintf ( char ** restrict strp, const char * restrict fmt,
va_list arg ) ;
(3) (Dynamic Memory TR)
int vaswprintf ( wchar_t ** restrict strp, const wchar_t * restrict fmt,
va_list arg ) ;
(4) (Dynamic Memory TR)
1) Analog zu sprintf , mit dem Unterschied, dass es einen Speicherbereich ausreichender Größe alloziert, um die Ausgabe einschließlich des abschließenden Nullzeichens aufzunehmen, als ob durch einen Aufruf von malloc , und einen Zeiger auf diesen Speicherbereich über das erste Argument zurückgibt. Dieser Zeiger sollte an free übergeben werden, um den allozierten Speicher freizugeben, wenn er nicht mehr benötigt wird.
2) Gleich wie (1) , mit dem Unterschied, dass es mit Breitzeichen wchar_t arbeitet (analog zu swprintf ).
3) Gleich wie (1) , wobei die variable Argumentliste durch arg ersetzt wird, die durch das va_start Makro initialisiert werden muss (und möglicherweise nachfolgenden va_arg Aufrufen).
4) Gleich wie (3) , mit dem Unterschied, dass es mit Breitzeichen wchar_t arbeitet.

Inhaltsverzeichnis

Parameter

strp - Ein Zeiger auf einen char * oder wchar_t * , der die formatierte Ausgabe enthalten wird
fmt - Eine Formatzeichenkette wie bei printf / wprintf und verwandten Funktionen
arg - Zusätzliche Argumente werden wie bei vsprintf und vswprintf verwendet

Rückgabewert

Die Anzahl der geschriebenen Zeichen, genau wie bei sprintf (1) , swprintf (2) , vsprintf (3) , oder vswprintf (4) , entsprechend. Wenn keine Speicherallokation möglich war oder ein anderer Fehler auftritt, geben diese Funktionen - 1 zurück, und der Inhalt von strp ist undefiniert.

Hinweise

Diese Funktionen sind GNU-Erweiterungen, nicht in C oder POSIX enthalten. Sie sind auch unter *BSD verfügbar. Die FreeBSD-Implementierung setzt strp bei einem Fehler auf NULL .

Die vasprintf - und vaswprintf -Funktionen rufen das va_end -Makro nicht auf.

Beispiel

Kann mit clang (C11) getestet werden

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void test(const char *fmt, ...)
{
    char* dyn_buf;
    printf("Demo asprintf:\n");
    const int written_1 = asprintf(&dyn_buf, "%s", fmt);
    printf("dyn_buf: \"%s\"; %i chars were written\n", dyn_buf, written_1);
    free(dyn_buf);
    printf("Demo vasprintf:\n");
    va_list args;
    va_start(args, fmt);
    const int written_2 = vasprintf(&dyn_buf, fmt, args);
    va_end(args);
    printf("dyn_buf: \"%s\"; %i chars were written\n", dyn_buf, written_2);
    free(dyn_buf);
}
int main(void)
{
    test("Testing... %d, %d, %d", 1, 2, 3);
}

Ausgabe:

Demo asprintf:
dyn_buf: "Testing... %d, %d, %d"; 21 chars were written
Demo vasprintf:
dyn_buf: "Testing... 1, 2, 3"; 18 chars were written