asprintf, aswprintf, vasprintf, vaswprintf
|
Definido en el encabezado
<stdio.h>
|
||
|
int
asprintf
(
char
**
restrict
strp,
const
char
*
restrict
fmt, ...
)
;
|
(1) | (TR de memoria dinámica) |
|
int
aswprintf
(
wchar_t
**
restrict
strp,
const
wchar_t
*
restrict
fmt, ...
)
;
|
(2) | (TR de memoria dinámica) |
|
int
vasprintf
(
char
**
restrict
strp,
const
char
*
restrict
fmt,
va_list arg ) ; |
(3) | (TR de memoria dinámica) |
|
int
vaswprintf
(
wchar_t
**
restrict
strp,
const
wchar_t
*
restrict
fmt,
va_list arg ) ; |
(4) | (TR de memoria dinámica) |
arg
, que debe ser inicializada por la macro
va_start
(y posiblemente posteriores llamadas a
va_arg
).
Contenidos |
Parámetros
| strp | - | Un puntero a un char * o wchar_t * que contendrá la salida formateada |
| fmt | - | Una cadena de formato como con printf / wprintf y funciones relacionadas |
| arg | - | Cualquier argumento adicional se utiliza como con vsprintf y vswprintf |
Valor de retorno
El número de caracteres escritos, al igual que
sprintf
(1)
,
swprintf
(2)
,
vsprintf
(3)
, o
vswprintf
(4)
, respectivamente. Si no fue posible la asignación de memoria, o ocurre algún otro error, estas funciones devolverán
-
1
, y el contenido de
strp
es indefinido.
Notas
Estas funciones son extensiones GNU, no están en C o POSIX. También están disponibles bajo *BSD. La implementación de FreeBSD establece
strp
a
NULL
en caso de error.
Las funciones
vasprintf
y
vaswprintf
no invocan la macro
va_end
.
Ejemplo
Se puede probar con clang (C11)
#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); }
Salida:
Demo asprintf: dyn_buf: "Testing... %d, %d, %d"; 21 chars were written Demo vasprintf: dyn_buf: "Testing... 1, 2, 3"; 18 chars were written