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
로 대체됩니다. 이는
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