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

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

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

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

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

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

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

반환 값Return Value

작성 된 문자 수 또는 오류가 발생 한 경우-1입니다.The number of characters written, or -1 if an error occurred. buffer 또는 format 이 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 문자를 제외하고 buffer에 저장된 바이트 수를 반환합니다.sprintf_s returns the number of bytes stored in buffer, not counting the terminating null character. swprintf_s 는 종료 null 와이드 문자를 제외하고 buffer에 저장된 와이드 문자 수를 반환합니다.swprintf_s returns the number of wide characters stored in buffer, not counting the terminating null wide character.

설명Remarks

sprintf_s 함수는 일련의 문자 및 값의 서식을 지정하고 buffer에 저장합니다.The sprintf_s function formats and stores a series of characters and values in buffer. argument (있는 경우)가 format의 해당 형식 사양에 따라 변환되어 출력됩니다.Each argument (if any) is converted and output according to the corresponding format specification in format. 형식은 일반 문자로 구성되어 있으며, 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_ssprintf 의 주요 차이점은 sprintf_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_ssprintf 의 다른 주요 차이점은 sprintf_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을 포함하여 서식 있는 텍스트에 대해 버퍼가 너무 작은 경우 buffer[0]에 null 문자를 배치하여 버퍼를 빈 문자열로 설정하면 잘못된 매개 변수 처리기가 호출됩니다.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 는 버퍼 크기가 0이 아닌 한 버퍼를 null로 종료합니다.Unlike _snprintf, sprintf_s guarantees that the buffer will be null-terminated unless the buffer size is zero.

swprintf_ssprintf_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 sprintf_s sprintf_s swprintf_s
_stprintf_s_l _sprintf_s_l _sprintf_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/O Stream I/O
fprintf, _fprintf_l, fwprintf, _fwprintf_l fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l sscanf, _sscanf_l, swscanf, _swscanf_l
vprintf 함수vprintf Functions