snprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_lsnprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_l

문자열에 서식이 지정된 데이터를 씁니다.Writes formatted data to a string. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l를 참조하세요.More secure versions of these functions are available; see _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

구문Syntax

int snprintf(  
   char *buffer,  
   size_t count,  
   const char *format [,  
   argument] ...   
);  
int _snprintf(  
   char *buffer,  
   size_t count,  
   const char *format [,  
   argument] ...   
);  
int _snprintf_l(  
   char *buffer,  
   size_t count,  
   const char *format,  
   locale_t locale [,  
   argument] ...   
);  
int _snwprintf(  
   wchar_t *buffer,  
   size_t count,  
   const wchar_t *format [,  
   argument] ...   
);  
int _snwprintf_l(  
   wchar_t *buffer,  
   size_t count,  
   const wchar_t *format,  
   locale_t locale [,  
   argument] ...   
);  
template <size_t size>  
int _snprintf(  
   char (&buffer)[size],  
   size_t count,  
   const char *format [,  
   argument] ...   
); // C++ only  
template <size_t size>  
int _snprintf_l(  
   char (&buffer)[size],  
   size_t count,  
   const char *format,  
   locale_t locale [,  
   argument] ...   
); // C++ only  
template <size_t size>  
int _snwprintf(  
   wchar_t (&buffer)[size],  
   size_t count,  
   const wchar_t *format [,  
   argument] ...   
); // C++ only  
template <size_t size>  
int _snwprintf_l(  
   wchar_t (&buffer)[size],  
   size_t count,  
   const wchar_t *format,  
   locale_t locale [,  
   argument] ...   
); // C++ only  

매개 변수Parameters

buffer
출력을 위한 저장소 위치입니다.Storage location for the output.

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

format
형식 컨트롤 문자열입니다.Format-control string.

argument
선택적 인수입니다.Optional arguments.

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

자세한 내용은 형식 사양 구문: printf 및 wprintf 함수를 참조하세요.For more information, see Format Specification Syntax: printf and wprintf Functions.

반환 값Return Value

len 은 종료 null을 포함하지 않는 데이터 형식이 지정된 문자열의 길이입니다.Let len be the length of the formatted data string, not including the terminating null. lencountsnprintf 의 경우 바이트이고, _snprintf의 경우 _snwprintf에 대한 와이드 문자입니다.Both len and count are in bytes for snprintf and _snprintf, wide characters for _snwprintf.

모든 함수에 대해 len < count, len 문자가 buffer에 저장되는 경우 null 종결자가 추가되고 len 이 반환됩니다.For all functions, if len < count, len characters are stored in buffer, a null-terminator is appended, and len is returned.

snprintf 함수는 lencount보다 크거나 같을 때 buffer[count-1]에 null 종결자를 배치하여 출력을 자릅니다.The snprintf function truncates the output when len is greater than or equal to count, by placing a null-terminator at buffer[count-1]. 반환 값은 len가 충분히 큰 경우 출력될 수 있는 문자 수인 count 입니다.The value returned is len, the number of characters that would have been output if count was large enough. snprintf 함수는 인코딩 오류가 발생하는 경우 음수 값을 반환합니다.The snprintf function returns a negative value if an encoding error occurs.

snprintf 이외의 모든 함수에서 len = count, len 문자가 buffer에 저장되는 경우 null 종결자가 추가되지 않고 len이 반환됩니다.For all functions other than snprintf, if len = count, len characters are stored in buffer, no null-terminator is appended, and len is returned. len > count, count 문자가 buffer에 저장되는 경우 null 종결자가 추가되지 않고 음수 값이 반환됩니다.If len > count, count characters are stored in buffer, no null-terminator is appended, and a negative value is returned.

buffer 가 null 포인터이고 count 가 0인 경우 종료 null을 포함하지 않고 출력 형식을 지정하는 데 필요한 문자의 개수로 len 이 반환됩니다.If buffer is a null pointer and count is zero, len is returned as the count of characters required to format the output, not including the terminating null. 동일한 argumentlocale 매개 변수를 사용하여 성공적으로 호출하려면 최소한 len + 1자로 보유되는 버퍼를 할당합니다.To make a successful call with the same argument and locale parameters, allocate a buffer holding at least len + 1 characters.

buffer가 null 포인터이고 count가 0이 아닌 경우 또는 format이 null 포인터인 경우 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다.If buffer is a null pointer and count is nonzero, or if 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.

이 오류 및 다른 오류 코드에 대한 자세한 내용은 errno, _doserrno, _sys_errlist, 및 _sys_nerr을 참조하세요.For information about these and other error codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

설명Remarks

snprintf 함수 및 _snprintf 함수 제품군은 countbuffer자 미만의 형식을 지정하고 저장합니다.The snprintf function and the _snprintf family of functions format and store count or fewer characters in buffer. snprintf 함수는 항상 종료 null 문자를 저장하고, 필요한 경우 출력을 잘라냅니다.The snprintf function always stores a terminating null character, truncating the output if necessary. _snprintf 함수 제품군은 형식이 지정된 문자열 길이가 count 자보다 작은 경우에만 종료 null 문자를 추가합니다.The _snprintf family of functions only appends a terminating null character if the formatted string length is strictly less than count characters. argument (있는 경우)가 format의 해당 형식 사양에 따라 변환되어 출력됩니다.Each argument (if any) is converted and is 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. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.If copying occurs between strings that overlap, the behavior is undefined.

중요

format 이 사용자 정의 문자열이 아닌지 확인하세요.Ensure that format is not a user-defined string. _snprintf 함수는 NULL 종료를 보장하지 않으므로, 특히 반환 값이 count이면 해당 값 뒤에 null 종결자를 추가하는 코드가 오는지 확인합니다.Because the _snprintf functions do not guarantee NULL termination—in particular, when the return value is count—make sure that they are followed by code that adds the null terminator. 자세한 내용은 버퍼 오버런 방지를 참조하세요.For more information, see Avoiding Buffer Overruns.

Visual Studio 2015 및 Windows 10의 UCRT부터 snprintf 는 더 이상 _snprintf와 같지 않습니다.Beginning with the UCRT in Visual Studio 2015 and Windows 10, snprintf is no longer identical to _snprintf. snprintf 함수 동작은 이제 C99 표준을 준수합니다.The snprintf function behavior is now C99 standard compliant.

_snwprintf_snprintf의 와이드 문자 버전이며, _snwprintf에 대한 포인터 인수는 와이드 문자 문자열입니다._snwprintf is a wide-character version of _snprintf; the pointer arguments to _snwprintf are wide-character strings. _snwprintf에서 인코딩 오류의 탐지 방식은 _snprintf에서와 다를 수 있습니다.Detection of encoding errors in _snwprintf might differ from that in _snprintf. _snwprintf와 같이 swprintfFILE 유형의 대상 대신 문자열에 출력을 기록합니다._snwprintf, just like swprintf, writes output to a string instead of a destination of type FILE.

_l 접미사가 있는 이러한 함수 버전은 현재 스레드 로캘 대신 전달된 로캘 매개 변수를 사용하는 경우를 제외하고는 동일합니다.The versions of these functions that have the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

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

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

Tchar.h 루틴Tchar.h routine _UNICODE 및 _MBCS 정의되지 않음_UNICODE and _MBCS not defined _MBCS 정의됨_MBCS defined _UNICODE 정의됨_UNICODE defined
_sntprintf _snprintf _snprintf _snwprintf
_sntprintf_l _snprintf_l _snprintf_l _snwprintf_l

요구 사항Requirements

루틴Routine 필수 헤더Required header
snprintf, _snprintf, _snprintf_lsnprintf, _snprintf, _snprintf_l <stdio.h><stdio.h>
_snwprintf, _snwprintf_l_snwprintf, _snwprintf_l <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

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

예제Example

// crt_snprintf.c  
// compile with: /W3  
#include <stdio.h>  
#include <stdlib.h>  

#if !defined(__cplusplus)  
typedef int bool;  
const bool true = 1;  
const bool false = 0;  
#endif  

#define FAIL 0 // change to 1 and see what happens  

int main(void)  
{  
   char buffer[200];  
   const static char s[] = "computer"  
#if FAIL  
"computercomputercomputercomputercomputercomputercomputercomputer"  
"computercomputercomputercomputercomputercomputercomputercomputer"  
"computercomputercomputercomputercomputercomputercomputercomputer"  
"computercomputercomputercomputercomputercomputercomputercomputer"  
#endif  
   ;  
   const char c = 'l';   
   const int i = 35;  
#if FAIL  
   const double fp = 1e300; // doesn't fit in the buffer  
#else  
   const double fp = 1.7320534;  
#endif  
   /* !subtract one to prevent "squeezing out" the terminal nul! */  
   const int bufferSize = sizeof(buffer)/sizeof(buffer[0]) - 1;  
   int bufferUsed = 0;  
   int bufferLeft = bufferSize - bufferUsed;  
   bool bSuccess = true;  
   buffer[0] = 0;  

   /* Format and print various data: */  

   if (bufferLeft > 0)  
   {  
      int perElementBufferUsed = _snprintf(&buffer[bufferUsed],   
      bufferLeft, "   String: %s\n", s ); // C4996  
      // Note: _snprintf is deprecated; consider _snprintf_s instead  
      if (bSuccess = (perElementBufferUsed >= 0))  
      {  
         bufferUsed += perElementBufferUsed;  
         bufferLeft -= perElementBufferUsed;  
         if (bufferLeft > 0)  
         {  
            int perElementBufferUsed = _snprintf(&buffer[bufferUsed],   
            bufferLeft, "   Character: %c\n", c ); // C4996  
            if (bSuccess = (perElementBufferUsed >= 0))  
            {  
               bufferUsed += perElementBufferUsed;  
               bufferLeft -= perElementBufferUsed;  
               if (bufferLeft > 0)  
               {  
                  int perElementBufferUsed = _snprintf(&buffer  
                  [bufferUsed], bufferLeft, "   Integer: %d\n", i ); // C4996  
                  if (bSuccess = (perElementBufferUsed >= 0))  
                  {  
                     bufferUsed += perElementBufferUsed;  
                     bufferLeft -= perElementBufferUsed;  
                     if (bufferLeft > 0)  
                     {  
                        int perElementBufferUsed = _snprintf(&buffer  
                        [bufferUsed], bufferLeft, "   Real: %f\n", fp ); // C4996  
                        if (bSuccess = (perElementBufferUsed >= 0))  
                        {  
                           bufferUsed += perElementBufferUsed;  
                        }  
                     }  
                  }  
               }  
            }  
         }  
      }  
   }  

   if (!bSuccess)  
   {  
      printf("%s\n", "failure");  
   }  
   else  
   {  
      /* !store nul because _snprintf doesn't necessarily (if the string   
       * fits without the terminal nul, but not with it)!  
       * bufferUsed might be as large as bufferSize, which normally is   
       * like going one element beyond a buffer, but in this case   
       * subtracted one from bufferSize, so we're ok.  
       */  
      buffer[bufferUsed] = 0;  
      printf( "Output:\n%s\ncharacter count = %d\n", buffer, bufferUsed );  
   }  
   return EXIT_SUCCESS;  
}  
Output:  
   String: computer  
   Character: l  
   Integer: 35  
   Real: 1.732053  

character count = 69  

참고 항목See Also

스트림 I/O Stream I/O
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
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