wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
| 헤더 <wchar.h>
|
||
int wprintf( const wchar_t* format, ... );
|
에 정의됨 (1) | (C95부터) (C99까지) |
int wprintf( const wchar_t* restrict format, ... );
|
(C99부터) | |
int fwprintf( FILE* stream, const wchar_t* format, ... );
|
(2) | (C95부터) (C99까지) |
int fwprintf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(C99부터) | |
int swprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, ... );
|
(3) | (C95부터) (C99까지) |
int swprintf( wchar_t* restrict buffer, size_t bufsz,
const wchar_t* restrict format, ... );
|
(C99부터) | |
int wprintf_s( const wchar_t* restrict format, ... );
|
(4) | (C11부터) |
int fwprintf_s( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(5) | (C11부터) |
int swprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, ... );
|
(6) | (C11부터) |
int snwprintf_s( wchar_t* restrict s, rsize_t n,
const wchar_t* restrict format, ... );
|
(7) | (C11부터) |
주어진 위치에서 데이터를 읽어 와이드 문자열 등가물로 변환하고 결과를 다양한 출력 대상에 씁니다.
stream에 씁니다.bufsz이 0보다 크면 결과를 와이드 문자열 buffer에 씁니다. 최대 bufsz - 1개의 와이드 문자를 쓰고 그 뒤에 널 와이드 문자를 붙입니다. bufsz이 0이면 아무것도 쓰지 않습니다(그리고 buffer은 널 포인터일 수 있습니다).- 가
%n에 있음format %s에 해당하는 인수 중 하나가 널 포인터임format또는buffer이 널 포인터임bufsz이 0이거나RSIZE_MAX / sizeof(wchar_t)- 보다 큼
- 문자열 및 문자 변환 지정자에서 인코딩 오류 발생
swprintf_s(bufsz에만 해당) 널을 포함하여 쓸 와이드 문자의 수가
s이 가리키는 배열에 맞게 결과를 자릅니다(truncate).wprintf_s, fwprintf_s, swprintf_s, snwprintf_s은 구현이 __STDC_LIB_EXT1__을 정의하고 사용자가 __STDC_WANT_LIB_EXT1__를 정수 상수 1로 정의하여 <stdio.h>를 포함하기 전에 정의한 경우에만 사용할 수 있습니다.매개변수
| stream | - | 출력할 파일 스트림 |
| buffer | - | 출력할 와이드 문자 문자열을 가리키는 포인터 |
| bufsz | - | 최대 bufsz - 1개의 와이드 문자(널 종료자 제외)를 쓸 수 있음
|
| format | - | 데이터 해석 방법을 지정하는 널 종료 와이드 문자열을 가리키는 포인터 |
| ... | - | 출력할 데이터를 지정하는 인수. 기본 인수 승격 이후의 인수가 해당 변환 지정자가 기대하는 타입이 아니거나, format이 필요로 하는 것보다 인수가 적으면 동작이 정의되지 않습니다. format이 필요로 하는 것보다 인수가 더 있으면 추가 인수는 평가되고 무시됩니다.
|
format 문자열은 일반 와이드 문자(% 제외)와 변환 지정으로 구성됩니다. 일반 와이드 문자는 변경 없이 출력 스트림에 복사됩니다. 각 변환 지정은 다음과 같은 형식을 가집니다:
- 도입
%문자.
- 도입
- (선택사항) 변환의 동작을 수정하는 하나 이상의 플래그:
-: 변환 결과가 필드 내에서 왼쪽 정렬됩니다(기본값은 오른쪽 정렬).+: 부호 있는 변환의 결과 앞에 항상 부호가 붙습니다(기본값은 음수일 때만 앞에 마이너스가 붙습니다).- 공백: 부호 있는 변환의 결과가 부호 문자로 시작하지 않거나 비어 있으면 결과 앞에 공백이 붙습니다.
+플래그가 있으면 무시됩니다. #: 변환의 대체 형식이 수행됩니다. 정확한 효과는 아래 표를 참조하십시오. 그렇지 않으면 동작이 정의되지 않습니다.0: 정수 및 부동 소수점 숫자 변환의 경우 필드를 채우는 데 공백 문자 대신 선행 0이 사용됩니다. 정수 숫자의 경우 정밀도가 명시적으로 지정되면 무시됩니다. 다른 변환에 이 플래그를 사용하면 동작이 정의되지 않습니다.-플래그가 있으면 무시됩니다.
- (선택사항) 최소 필드 너비를 지정하는 정수 값 또는
*. 결과는 필요에 따라 기본적으로 공백 문자로 채워집니다. 오른쪽 정렬일 때는 왼쪽에, 왼쪽 정렬일 때는 오른쪽에 채워집니다.*을 사용하는 경우 너비는 변환할 인수와 (제공된 경우) 정밀도를 제공하는 인수 앞에 나타나는int타입의 추가 인수로 지정됩니다. 인수 값이 음수이면-플래그가 지정되고 양수 필드 너비가 적용됩니다(참고: 이것은 최소 너비입니다. 값이 잘리지 않습니다).
- (선택사항) 최소 필드 너비를 지정하는 정수 값 또는
- (선택사항)
.뒤에 정수 또는*가 오거나 아무것도 오지 않아 변환의 정밀도를 지정합니다.*을 사용하는 경우 정밀도는 변환할 인수 앞에, 그러나 (제공된 경우) 최소 필드 너비를 제공하는 인수 뒤에 나타나는int타입의 추가 인수로 지정됩니다. 이 인수의 값이 음수이면 무시됩니다. 숫자나*가 모두 사용되지 않으면 정밀도는 0으로 간주됩니다. 정밀도의 정확한 효과는 아래 표를 참조하십시오.
- (선택사항)
- (선택사항) 길이 수정자는 (변환 형식 지정자와 함께) 인수의 크기를 지정합니다.
- 변환 형식 지정자.
사용 가능한 형식 지정자는 다음과 같습니다:
| 변환 지정자 |
설명 | 예상 인수 타입 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 길이 수정자→ | hh | h | 없음 | l | ll | j | z | t | L | |
| C99부터만 가능→ | 예 | 예 | 예 | 예 | 예 | |||||
%
|
리터럴 %을 씁니다. 전체 변환 지정은 %%이어야 합니다.
|
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 |
c
|
단일 문자를 씁니다.
|
해당 없음 | 해당 없음 | int |
wint_t |
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 |
s
|
문자열을 씁니다.
|
해당 없음 | 해당 없음 | char* |
wchar_t* |
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 |
di
|
부호 있는 정수를 십진수 표현 [-]dddd으로 변환합니다.
|
signed char |
short |
int |
long |
long long |
intmax_t |
※ |
ptrdiff_t |
해당 없음 |
bB (선택사항)
(C23) |
부호 없는 정수를 이진수 표현 bbbb으로 변환합니다.
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
ptrdiff_t의 부호 없는 버전 |
해당 없음 |
o
|
부호 없는 정수를 8진수 표현 oooo으로 변환합니다.
|
해당 없음 | ||||||||
xX
|
부호 없는 정수를 16진수 표현 hhhh으로 변환합니다.
|
해당 없음 | ||||||||
u
|
부호 없는 정수를 십진수 표현 dddd으로 변환합니다.
|
해당 없음 | ||||||||
fF (C99)
|
부동 소수점 수를 [-]ddd.ddd 형식의 십진수 표기법으로 변환합니다.
|
해당 없음 | 해당 없음 | double |
double (C99) |
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | long double |
eE
|
부동 소수점 수를 십진수 지수 표기법으로 변환합니다.
|
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | |||
aA
(C99) |
부동 소수점 수를 16진수 지수 표기법으로 변환합니다.
|
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | |||
gG
|
부동 소수점 수를 값과 정밀도에 따라 십진수 또는 십진수 지수 표기법으로 변환합니다.
|
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | |||
n
|
이 함수 호출에서 지금까지 쓰인 문자 수를 반환합니다.
|
signed char* |
short* |
int* |
long* |
long long* |
intmax_t * |
※ |
ptrdiff_t * |
해당 없음 |
p
|
포인터를 정의하는 구현 정의 문자 시퀀스를 씁니다. |
해당 없음 | 해당 없음 | void* |
해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 | 해당 없음 |
| 참고 | ||||||||||
|
부동 소수점 변환 함수는 무한대를 NaN은 변환
고정 너비 문자 타입(int8_t 등)에 대한 올바른 변환 지정자는 헤더 <inttypes.h>에 정의되어 있습니다(PRIdMAX, PRIuMAX 등은 메모리 쓰기 변환 지정자 각 변환 지정자의 동작 후에 시퀀스 포인트가 있습니다. 이를 통해 동일한 변수에 여러 변환 지정이 유효하지 않으면 동작이 정의되지 않습니다. | ||||||||||
반환값
bufsz보다 크거나 같으면( bufsz이 0일 때 포함) 음수 값.buffer에 쓰인 와이드 문자 수(종료 널 제외). 인코딩 오류 및 오버플로 시 음수 값을 반환합니다. 다른 모든 오류에서는 0을 반환합니다.buffer이 충분히 컸다면 bufsz에 쓰였을 와이드 문자 수(종료 널 제외), 오류가 발생하면 음수 값. (즉, 반환값이 음수가 아니고 bufsz보다 작은 경우에만 쓰기가 성공하고 완료된 것입니다)참고
좁은 문자열은 필요한 출력 버퍼 크기를 결정할 수 있게 해주는 snprintf를 제공하지만, 와이드 문자열에는 이에 상응하는 함수가 없었습니다 (snwprintf_s까지)(C11부터). 버퍼 크기를 결정하기 위해 프로그램은 swprintf를 호출하고 결과 값을 확인한 후 더 큰 버퍼를 재할당하여 성공할 때까지 다시 시도해야 할 수 있습니다.
snwprintf_s은 swprintf_s과 달리 결과를 buffer이 가리키는 배열에 맞게 자릅니다(truncate). 대부분의 경계 검사 함수는 자르기를 오류로 처리하지만 예외입니다.
예제
#include <locale.h>
#include <wchar.h>
int main(void)
{
char narrow_str[] = "z\u00df\u6c34\U0001f34c";
// or "zß水🍌"
// or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator
setlocale(LC_ALL, "en_US.utf8");
swprintf(warr, sizeof warr / sizeof* warr,
L"Converted from UTF-8: '%s'", narrow_str);
wprintf(L"%ls\n", warr);
}
출력:
Converted from UTF-8: 'zß水🍌'
참조
- C23 표준 (ISO/IEC 9899:2024):
- 7.29.2.1 The fwprintf 함수 (p: TBD)
- 7.29.2.3 The swprintf 함수 (p: TBD)
- 7.29.2.11 The wprintf 함수 (p: TBD)
- K.3.9.1.1 The fwprintf_s 함수 (p: TBD)
- K.3.9.1.4 The swprintf_s 함수 (p: TBD)
- K.3.9.1.13 The wprintf_s 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
- 7.29.2.1 The fwprintf 함수 (p: TBD)
- 7.29.2.3 The swprintf 함수 (p: TBD)
- 7.29.2.11 The wprintf 함수 (p: TBD)
- K.3.9.1.1 The fwprintf_s 함수 (p: TBD)
- K.3.9.1.4 The swprintf_s 함수 (p: TBD)
- K.3.9.1.13 The wprintf_s 함수 (p: TBD)
- C11 표준 (ISO/IEC 9899:2011):
- 7.29.2.1 The fwprintf 함수 (p: 403-410)
- 7.29.2.3 The swprintf 함수 (p: 416)
- 7.29.2.11 The wprintf 함수 (p: 421)
- K.3.9.1.1 The fwprintf_s 함수 (p: 628)
- K.3.9.1.4 The swprintf_s 함수 (p: 630-631)
- K.3.9.1.13 The wprintf_s 함수 (p: 637-638)
- C99 표준 (ISO/IEC 9899:1999):
- 7.24.2.1 The fwprintf 함수 (p: 349-356)
- 7.24.2.3 The swprintf 함수 (p: 362)
- 7.24.2.11 The wprintf 함수 (p: 366)
같이 보기
(C99)(C11)(C11)(C11)(C11) |
stdout, 파일 스트림 또는 버퍼에 형식화된 출력을 출력합니다. (함수) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) |
stdout, 파일 스트림 또는 버퍼에 가변 인자 목록을 사용하여 형식화된 와이드 문자 출력을 출력합니다. (함수) |
(C95) |
와이드 문자열을 파일 스트림에 씁니다. (함수) |
C++ 문서 for wprintf, fwprintf, swprintf
| |