asprintf, aswprintf, vasprintf, vaswprintf
|
定義先ヘッダ
<stdio.h>
|
||
|
int
asprintf
(
char
**
restrict
strp,
const
char
*
restrict
fmt, ...
)
;
|
(1) | (動的メモリ TR) |
|
int
aswprintf
(
wchar_t
**
restrict
strp,
const
wchar_t
*
restrict
fmt, ...
)
;
|
(2) | (動的メモリ TR) |
|
int
vasprintf
(
char
**
restrict
strp,
const
char
*
restrict
fmt,
va_list arg ) ; |
(3) | (動的メモリ TR) |
|
int
vaswprintf
(
wchar_t
**
restrict
strp,
const
wchar_t
*
restrict
fmt,
va_list arg ) ; |
(4) | (動的メモリ TR) |
arg
で置き換えられている。
arg
は
va_start
マクロ(およびそれに続く可能性のある
va_arg
呼び出し)によって初期化されなければならない。
目次 |
パラメータ
| strp | - | フォーマットされた出力を含む char * または wchar_t * へのポインタ |
| fmt | - | printf / wprintf および関連関数と同様のフォーマット文字列 |
| arg | - | 追加の引数は vsprintf および vswprintf と同様に使用される |
戻り値
書き込まれた文字数は、それぞれ
sprintf
(1)
、
swprintf
(2)
、
vsprintf
(3)
または
vswprintf
(4)
と同様です。メモリ割り当てが不可能な場合、またはその他のエラーが発生した場合、これらの関数は
-
1
を返し、
strp
の内容は未定義となります。
注記
これらの関数はGNU拡張であり、CまたはPOSIXには含まれません。*BSDでも利用可能です。FreeBSDの実装では、エラー時に
strp
を
NULL
に設定します。
vasprintf
および
vaswprintf
関数は
va_end
マクロを呼び出しません。
例
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); }
出力:
Demo asprintf: dyn_buf: "Testing... %d, %d, %d"; 21 chars were written Demo vasprintf: dyn_buf: "Testing... 1, 2, 3"; 18 chars were written