sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

문자열에 서식이 지정된 데이터를 씁니다.Write formatted data to a string. 이러한 함수 중 일부의 더 안전한 버전을 사용할 수 있습니다. sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l을 참조하세요.More secure versions of some of these functions are available; see sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. Swprintf_swprintf_l 의 안전한 버전은 버퍼의 크기를 매개 변수로 사용 합니다.The secure versions of swprintf and _swprintf_l take the size of the buffer as a parameter.

구문Syntax

int sprintf(
   char *buffer,
   const char *format [,
   argument] ...
);
int _sprintf_l(
   char *buffer,
   const char *format,
   locale_t locale [,
   argument] ...
);
int swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument]...
);
int _swprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ...
);
int __swprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument] ...
);
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
   argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
   char (&buffer)[size],
   const char *format,
   locale_t locale [,
   argument] ...
); // C++ only

매개 변수Parameters

버퍼buffer
출력을 위한 스토리지 위치Storage location for output

countcount
이 함수의 유니코드 버전에 저장할 최대 문자 수입니다.Maximum number of characters to store in the Unicode version of this function.

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

argumentargument
선택적 인수Optional arguments

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 포인터인 경우 매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기가 호출 됩니다.If buffer or format is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. 계속 해 서 실행 하도록 허용한 경우 이러한 함수는-1을 반환 하 고 errnoEINVAL로 설정 합니다.If execution is allowed to continue, these functions return -1 and set errno to EINVAL.

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

설명Remarks

Sprintf 함수는 일련의 문자 및 값의 형식을 지정 하 고 버퍼에 저장 합니다.The sprintf 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. 형식은 일반 문자로 구성 되며 printfformat 인수와 동일한 폼 및 함수를 가집니다.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를 사용 하는 경우 기록 되는 문자 수를 제한할 방법이 없습니다. 즉, sprintf 를 사용 하는 코드는 버퍼 오버런에 취약 합니다.Using sprintf, there is no way to limit the number of characters written, which means that code using sprintf is susceptible to buffer overruns. 버퍼에 쓸 최대 문자 수를 지정 하는 _snprintf관련 함수를 사용 하거나 _scprintf 를 사용 하 여 필요한 버퍼 크기를 결정 하십시오.Consider using the related function _snprintf, which specifies a maximum number of characters to write to buffer, or use _scprintf to determine how large a buffer is required. 또한 형식이 사용자 정의 문자열이 아닌지 확인 합니다.Also, ensure that format is not a user-defined string.

swprintfsprintf의 와이드 문자 버전입니다. swprintf 에 대 한 포인터 인수는 와이드 문자 문자열입니다.swprintf is a wide-character version of sprintf; the pointer arguments to swprintf are wide-character strings. Swprintf 의 인코딩 오류 검색은 sprintf와 다를 수 있습니다.Detection of encoding errors in swprintf may differ from sprintf. swprintfFwprintf 는 형식이 FILE의 대상이 아니라 문자열에 출력을 쓰는 것 을 제외 하 고 동일 하 게 동작 하며 swprintfcount 매개 변수를 사용 하 여 기록할 최대 문자 수를 지정 해야 합니다.swprintf and fwprintf behave identically except swprintf writes output to a string rather than to a destination of type FILE, and swprintf requires the count parameter to specify the maximum number of characters to write. _L 접미사가 있는 이러한 함수 버전은 현재 스레드 로캘 대신 전달 된 로캘 매개 변수를 사용 하는 경우를 제외 하 고는 동일 합니다.The versions of these functions with the _l suffix are identical except they use the locale parameter passed in instead of the current thread locale.

swprintfsize_t형식의 두 번째 매개 변수 개수를 필요로 하는 ISO C 표준을 준수 합니다.swprintf conforms to the ISO C Standard, which requires the second parameter, count, of type size_t. 이전의 비표준 동작을 강제 적용 하려면 _CRT_NON_CONFORMING_SWPRINTFS를 정의 합니다.To force the old nonstandard behavior, define _CRT_NON_CONFORMING_SWPRINTFS. 이후 버전에서 기존 동작이 제거될 수도 있으므로 새 준수 동작을 사용하도록 코드를 변경해야 합니다.In a future version, the old behavior may be removed, so code should be changed to use the new conformant behavior.

C++에서 이러한 함수는 보다 최신의 보안 대응 함수를 호출하는 템플릿 오버로드를 갖고 있습니다.In C++, these functions have template overloads that invoke the newer, secure counterparts of these functions. 자세한 내용은 안전한 템플릿 오버로드를 참조하세요.For more information, see Secure Template Overloads.

제네릭 텍스트 라우팅 매핑Generic-Text Routine Mappings

TCHAR.H 루틴TCHAR.H routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE & _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_stprintf_stprintf sprintfsprintf sprintfsprintf _swprintf_swprintf
_stprintf_l_stprintf_l _sprintf_l_sprintf_l _sprintf_l_sprintf_l __swprintf_l__swprintf_l

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
sprintf, _sprintf_lsprintf, _sprintf_l <stdio.h>
swprintf, _swprintf_lswprintf, _swprintf_l <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

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

예: sprintf를 사용 하 여 데이터 서식 지정Example: Use sprintf to format data

// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer,     "   String:    %s\n", s ); // C4996
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996
   // Note: sprintf is deprecated; consider using sprintf_s instead

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

character count = 79

예: 오류 코드 처리Example: Error code handling

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

int main( void )
{
   wchar_t buf[100];
   int len = swprintf( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf 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
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