asprintf, aswprintf, vasprintf, vaswprintf
|
Défini dans l'en-tête
<stdio.h>
|
||
|
int
asprintf
(
char
**
restrict
strp,
const
char
*
restrict
fmt, ...
)
;
|
(1) | (TR mémoire dynamique) |
|
int
aswprintf
(
wchar_t
**
restrict
strp,
const
wchar_t
*
restrict
fmt, ...
)
;
|
(2) | (TR mémoire dynamique) |
|
int
vasprintf
(
char
**
restrict
strp,
const
char
*
restrict
fmt,
va_list arg ) ; |
(3) | (TR mémoire dynamique) |
|
int
vaswprintf
(
wchar_t
**
restrict
strp,
const
wchar_t
*
restrict
fmt,
va_list arg ) ; |
(4) | (TR mémoire dynamique) |
arg
, qui doit être initialisée par la macro
va_start
(et éventuellement par des appels ultérieurs à
va_arg
).
Table des matières |
Paramètres
| strp | - | Un pointeur vers un char * ou un wchar_t * qui contiendra la sortie formatée |
| fmt | - | Une chaîne de format comme avec printf / wprintf et les fonctions associées |
| arg | - | Tous les arguments supplémentaires sont utilisés comme avec vsprintf et vswprintf |
Valeur de retour
Le nombre de caractères écrits, comme pour
sprintf
(1)
,
swprintf
(2)
,
vsprintf
(3)
, ou
vswprintf
(4)
, respectivement. Si l'allocation de mémoire n'était pas possible, ou si une autre erreur survient, ces fonctions retourneront
-
1
, et le contenu de
strp
est indéfini.
Notes
Ces fonctions sont des extensions GNU, non présentes en C ou POSIX. Elles sont également disponibles sous *BSD. L'implémentation FreeBSD définit
strp
à
NULL
en cas d'erreur.
Les fonctions
vasprintf
et
vaswprintf
n'invoquent pas la macro
va_end
.
Exemple
Peut être testé avec 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); }
Sortie :
Demo asprintf: dyn_buf: "Testing... %d, %d, %d"; 21 chars were written Demo vasprintf: dyn_buf: "Testing... 1, 2, 3"; 18 chars were written