printf_s, _printf_s_l, wprintf_s, _wprintf_s_l
표준 출력 스트림에 서식이 지정된 출력을 출력합니다. 이러한 버전의 printf, _printf_l, wprintf, _wprintf_l에는 CRT의 보안 기능에 설명된 대로 보안 향상 기능이 포함됩니다.
int printf_s(
const char *format [,
argument]...
);
int _printf_s_l(
const char *format,
locale_t locale [,
argument]...
);
int wprintf_s(
const wchar_t *format [,
argument]...
);
int _wprintf_s_l(
const wchar_t *format,
locale_t locale [,
argument]...
);
매개 변수
format
서식 컨트롤입니다.argument
선택적 인수입니다.locale
사용할 로캘입니다.
반환 값
인쇄된 문자 수를 반환하거나 오류가 발생하면 음수 값을 반환합니다.
설명
printf_s 함수는 일련의 문자 및 값을 형식 지정하고 표준 출력 스트림인 stdout에 출력합니다. 만약 인수가 형식 문자열 다음에 나오는 경우, format 문자열에 해당 인수에 대한 출력 형식을 결정하는 사양이 포함되어야 합니다.
여기서 printf_s 와 printf 의 주요 차이점은 printf_s 는 유효한 서식 문자에 대한 서식 문자열을 검사하고, printf 는 서식 문자열 또는 버퍼가 포인터인지 여부만 검사한다는 점입니다. 검사에 실패할 경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우, 함수는 -1을 반환하고 errno를 EINVAL로 설정합니다.
errno 및 오류 코드에 대한 내용은 _doserrno, errno, _sys_errlist 및 _sys_nerr을 참조하십시오.
printf_s와fprintf_s 은 동일하게 행동합니다. printf_s 이 stdout 에서 FILE형식의 목적지라기보다, 출력을 작성하는 것을 제외합니다. 자세한 내용은 fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l을 참조하십시오.
wprintf_s는 printf_s의 와이드 문자 버전이며, format은 와이드 문자 문자열입니다. wprintf_s 및 printf_s는 ANSI 모드에서 스트림이 열린 경우 동일하게 동작합니다. printf_s 는 현재 UNICODE 스트림에 대한 출력을 지원하지 않습니다.
_l 접미사가 있는 이러한 함수 버전은 현재 스레드 로캘 대신 전달된 로캘 매개 변수를 사용하는 경우를 제외하고는 동일합니다.
제네릭 텍스트 라우팅 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
_MBCS 정의됨 |
_unicode 정의됨 |
---|---|---|---|
_tprintf_s |
printf_s |
printf_s |
wprintf_s |
_tprintf_s_l |
_printf_s_l |
_printf_s_l |
_wprintf_s_l |
format 인수는 일반 문자, 이스케이프 시퀀스 및 형식 사양(인수가 format을 따를 경우)으로 구성됩니다. 일반 문자 및 이스케이프 시퀀스는 나타나는 순서대로 stdout으로 복사됩니다. 예를 들어, 다음 줄에서
printf_s("Line one\n\t\tLine two\n");
출력을 만듭니다.
Line one
Line two
서식 사양은 항상 백분율 기호(%)로 시작하며 왼쪽에서 오른쪽으로 읽습니다. printf_s에서 첫 번째 형식 사양을 발견하면(있을 경우) format 뒤의 첫 번째 인수 값을 변환하고 그에 따라 출력합니다. 두 번째 서식 사양은 두 번째 인수를 변환하여 출력합니다. 형식 사양보다 많은 인수가 있으면 추가 인수가 무시됩니다. 모든 형식 사양에 충분한 인수가 없는 경우 결과가 정의되지 않습니다.
보안 정보 |
---|
format이 사용자 정의 문자열이 아닌지 확인하십시오. |
요구 사항
루틴 |
필수 헤더 |
---|---|
printf_s, _printf_s_l |
<stdio.h> |
wprintf_s, _wprintf_s_l |
<stdio.h> 또는 <wchar.h> |
콘솔은 Windows 스토어 응용 프로그램에서 지원되지 않습니다. 콘솔에 연결된 표준 스트림 핸들 stdin, stdout 및 stderr은 Windows 스토어 응용 프로그램의 C 런타임 함수에서 사용되기 전에 리디렉션되어야 합니다. 추가 호환성 정보는 호환성을 참조하십시오.
예제
// crt_printf_s.c
/* This program uses the printf_s and wprintf_s functions
* to produce formatted output.
*/
#include <stdio.h>
int main( void )
{
char ch = 'h', *string = "computer";
int count = -9234;
double fp = 251.7366;
wchar_t wch = L'w', *wstring = L"Unicode";
/* Display integers. */
printf_s( "Integer formats:\n"
" Decimal: %d Justified: %.6d Unsigned: %u\n",
count, count, count );
printf_s( "Decimal %d as:\n Hex: %Xh C hex: 0x%x Octal: %o\n",
count, count, count, count );
/* Display in different radixes. */
printf_s( "Digits 10 equal:\n Hex: %i Octal: %i Decimal: %i\n",
0x10, 010, 10 );
/* Display characters. */
printf_s("Characters in field (1):\n%10c%5hc%5C%5lc\n", ch, ch, wch, wch);
wprintf_s(L"Characters in field (2):\n%10C%5hc%5c%5lc\n", ch, ch, wch, wch);
/* Display strings. */
printf_s("Strings in field (1):\n%25s\n%25.4hs\n %S%25.3ls\n",
string, string, wstring, wstring);
wprintf_s(L"Strings in field (2):\n%25S\n%25.4hs\n %s%25.3ls\n",
string, string, wstring, wstring);
/* Display real numbers. */
printf_s( "Real numbers:\n %f %.2f %e %E\n", fp, fp, fp, fp );
/* Display pointer. */
printf_s( "\nAddress as: %p\n", &count);
}
샘플 출력
Integer formats:
Decimal: -9234 Justified: -009234 Unsigned: 4294958062
Decimal -9234 as:
Hex: FFFFDBEEh C hex: 0xffffdbee Octal: 37777755756
Digits 10 equal:
Hex: 16 Octal: 8 Decimal: 10
Characters in field (1):
h h w w
Characters in field (2):
h h w w
Strings in field (1):
computer
comp
Unicode Uni
Strings in field (2):
computer
comp
Unicode Uni
Real numbers:
251.736600 251.74 2.517366e+002 2.517366E+002
Address as: 0012FF78
해당 .NET Framework 항목
참고 항목
참조
fprintf, _fprintf_l, fwprintf, _fwprintf_l
scanf, _scanf_l, wscanf, _wscanf_l