sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_lsprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

문자열에 서식이 지정된 데이터를 씁니다.Write formatted data to a string. 이러한 함수는 CRT의 보안 기능에 설명된 대로 강화된 보안 기능이 있는 sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l의 버전입니다.These are versions of sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l with security enhancements as described in Security Features in the CRT.

구문Syntax

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   ...
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale,
   ...
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   ...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale,
   ...
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format,
   ...
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   ...
); // C++ only

매개 변수Parameters

bufferbuffer
출력을 위한 저장소 위치Storage location for output

sizeOfBuffersizeOfBuffer
저장할 최대 문자 수입니다.Maximum number of characters to store.

formatformat
형식 컨트롤 문자열Format-control string

......
서식을 지정할 선택적 인수Optional arguments to be formatted

localelocale
사용할 로캘입니다.The locale to use.

자세한 내용은 형식 사양을 참조하세요.For more information, see Format Specifications.

반환 값Return Value

기록 된 문자 수 또는 오류가 발생 한 경우-1입니다.The number of characters written, or -1 if an error occurred. 하는 경우 버퍼 또는 형식 가 null 포인터 sprintf_sswprintf_s -1을 반환 하 고 설정할 errnoEINVAL합니다.If buffer or format is a null pointer, sprintf_s and swprintf_s return -1 and set errno to EINVAL.

sprintf_s 에 저장 된 바이트 수를 반환 버퍼, 종결 null 문자를 제외 합니다.sprintf_s returns the number of bytes stored in buffer, not counting the terminating null character. swprintf_s 에 저장 된 와이드 문자 수를 반환 버퍼, 종료 null 와이드 문자를 제외 합니다.swprintf_s returns the number of wide characters stored in buffer, not counting the terminating null wide character.

설명Remarks

합니다 sprintf_s 포맷 하 고 일련의 문자 및 값을 저장 하는 함수 버퍼합니다.The sprintf_s function formats and stores a series of characters and values in buffer. 인수 (있는 경우) 변환 되 고 해당 형식 사양에 따라 출력 형식합니다.Each argument (if any) is converted and output according to the corresponding format specification in format. 형식은 일반 문자로 구성 되어 있으며 동일한 폼 및 함수는 형식 에 대 한 인수가 printf합니다.The format consists of ordinary characters and has the same form and function as the format argument for printf. 기록된 마지막 문자 뒤에 null 문자가 추가됩니다.A null character is appended after the last character written. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.If copying occurs between strings that overlap, the behavior is undefined.

주요 차이점 sprintf_s 하 고 sprintfsprintf_s 반면 유효한 서식 문자에 대 한 서식 문자열을 검사 sprintf 만 확인 하는 경우 형식 문자열 또는 버퍼 NULL 포인터입니다.One main difference between sprintf_s and sprintf is that sprintf_s checks the format string for valid formatting characters, whereas sprintf only checks if the format string or buffer are NULL pointers. 검사에 실패할 경우 Parameter Validation에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다.If either check fails, the invalid parameter handler is invoked, as described in Parameter Validation. 실행 함수는-1 반환 하 고 집합을 계속 하도록 허용 된 경우 errnoEINVAL합니다.If execution is allowed to continue, the function returns -1 and sets errno to EINVAL.

다른 주요 차이점 sprintf_s 하 고 sprintfsprintf_s 문자에서 출력 버퍼의 크기를 지정 합니다. 길이 매개 변수를 사용 합니다.The other main difference between sprintf_s and sprintf is that sprintf_s takes a length parameter specifying the size of the output buffer in characters. 종료 null을 포함 하 여 서식이 지정 된 텍스트에 대해 버퍼가 너무 작습니다. 경우에 null 문자를 배치 하 여 버퍼를 빈 문자열로 설정 버퍼[0] 및 잘못 된 매개 변수 처리기가 호출 됩니다.If the buffer is too small for the formatted text, including the terminating null, then the buffer is set to an empty string by placing a null character at buffer[0], and the invalid parameter handler is invoked. 와 달리 _snprintf하십시오 sprintf_s 는 버퍼를 null로 종료 버퍼 크기를 0이 아닌 한 보장 합니다.Unlike _snprintf, sprintf_s guarantees that the buffer will be null-terminated unless the buffer size is zero.

swprintf_s 의 와이드 문자 버전이 sprintf_s;에 대 한 포인터 인수 swprintf_s 는 와이드 문자 문자열입니다.swprintf_s is a wide-character version of sprintf_s; the pointer arguments to swprintf_s are wide-character strings. 인코딩 오류의 탐지 swprintf_s 에 다를 수 있습니다 sprintf_s합니다.Detection of encoding errors in swprintf_s may differ from that in sprintf_s. 포함 된 이러한 함수의 버전을 _l 접미사는 현재 스레드 로캘 대신 전달 된 로캘 매개 변수를 사용 한다는 점을 제외 하면 동일 합니다.The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

C++에서는 템플릿 오버로드로 인해 이러한 함수를 사용하는 것이 보다 간단해 집니다. 오버로드는 버퍼 길이를 자동으로 유추할 수 있어 크기 인수를 지정할 필요가 없으며, 기존의 비보안 함수를 보다 최신의 보안 대응 함수로 자동으로 바꿀 수 있습니다.In C++, use of these functions is simplified by template overloads; the overloads can infer buffer length automatically, which eliminates the need to specify a size argument, and they can automatically replace older, non-secure functions with their newer, secure counterparts. 자세한 내용은 Secure Template Overloads을 참조하세요.For more information, see Secure Template Overloads.

버전이 sprintf_s 버퍼가 너무 작습니다. 되나요 대 한 추가 제어를 제공 합니다.There are versions of sprintf_s that offer additional control over what happens if the buffer is too small. 자세한 내용은 _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l을 참조하세요.For more information, see _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

제네릭 텍스트 루틴 매핑Generic-Text Routine Mappings

TCHAR.H 루틴TCHAR.H routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE & _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_stprintf_s_stprintf_s sprintf_ssprintf_s sprintf_ssprintf_s swprintf_sswprintf_s
_stprintf_s_l_stprintf_s_l _sprintf_s_l_sprintf_s_l _sprintf_s_l_sprintf_s_l _swprintf_s_l_swprintf_s_l

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
sprintf_s, _sprintf_s_lsprintf_s, _sprintf_s_l C: <stdio.h>C: <stdio.h>

C++: <cstdio> 또는 <stdio.h>C++: <cstdio> or <stdio.h>
swprintf_s, _swprintf_s_lswprintf_s, _swprintf_s_l C: <stdio.h> 또는 <wchar.h>C: <stdio.h> or <wchar.h>

C++: <cstdio>, <cwchar>, <stdio.h> 또는 <wchar.h>C++: <cstdio>, <cwchar>, <stdio.h> or <wchar.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.For additional compatibility information, see Compatibility.

예제Example

// crt_sprintf_s.c
// This program uses sprintf_s to format various
// data and place them in the string named buffer.
//

#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   // Format and print various data:
   j  = sprintf_s( buffer, 200,     "   String:    %s\n", s );
   j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
   j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
   j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );

   printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
Output:
   String:    computer
   Character: l
   Integer:   35
   Real:      1.732053

character count = 79

예제Example

// crt_swprintf_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf_s fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters

참고자료See also

스트림 I/OStream I/O
fprintf, _fprintf_l, fwprintf, _fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
scanf, _scanf_l, wscanf, _wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_lsscanf, _sscanf_l, swscanf, _swscanf_l
vprintf 함수vprintf Functions