asprintf, aswprintf, vasprintf, vaswprintf
|
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) |
arg
ersetzt wird, die durch das
va_start
Makro initialisiert werden muss (und möglicherweise nachfolgenden
va_arg
Aufrufen).
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