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

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

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

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

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

localelocale
사용할 로캘입니다.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. 둘 다 len 하 고 개수 바이트에 snprintf_snprintf, 와이드 문자에 대 한 _snwprintf.Both len and count are in bytes for snprintf and _snprintf, wide characters for _snwprintf.

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

합니다 snprintf 함수는 출력을 자르 때 len 보다 크거나 같음 개수에 null 종결자를 배치 하 여 buffer[count-1]입니다.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, 경우 출력 될 수 있는 문자 수가 개수 가 충분히 큰 합니다.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 = 개수len 문자에 저장 된 버퍼에 없는 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 > 개수개수 문자에 저장 됩니다 버퍼, 없는 null 종결자가 추가 된, 및 음수 값이 반환 됩니다.If len > count, count characters are stored in buffer, no null-terminator is appended, and a negative value is returned.

경우 버퍼 가 null 포인터와 개수 가 0 이면 len 종결 null을 포함 하지 않습니다는 출력의 서식을 지정 하는 데 필요한 문자의 개수로 반환 됩니다.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. 동일한 성공적으로 호출 하려면 인수 하 고 로캘 매개 변수를 하나 이상 보유 되는 버퍼를 할당 len + 1 자로.To make a successful call with the same argument and locale parameters, allocate a buffer holding at least len + 1 characters.

하는 경우 버퍼 가 null 포인터 및 개수 값은 0 이거나 형식 가 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 형식을 지정 하 고 저장소 제품군 개수 자 미만의 버퍼합니다.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 서식이 지정 된 문자열 길이 엄격 하 게 하는 경우만 함수 패밀리는 종료 null 문자를 추가 미만 개수 문자입니다.The _snprintf family of functions only appends a terminating null character if the formatted string length is strictly less than count characters. 인수 (있는 경우) 변환 되 고 해당 형식 사양에 따라 출력이 형식합니다.Each argument (if any) is converted and is 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. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.If copying occurs between strings that overlap, the behavior is undefined.

중요

format이 사용자 정의 문자열이 아닌지 확인하세요.Ensure that format is not a user-defined string. 때문에 합니다 _snprintf 함수는 null 종료를 보장 하지 않습니다-특히 반환 값이 개수-는 이러한 뒤에 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, 마찬가지로 swprintf에 출력 유형의 대상 대신 문자열을 씁니다 파일합니다._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_sntprintf _snprintf_snprintf _snprintf_snprintf _snwprintf_snwprintf
_sntprintf_l_sntprintf_l _snprintf_l_snprintf_l _snprintf_l_snprintf_l _snwprintf_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 null! */
   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 null because _snprintf doesn't necessarily (if the string
       * fits without the terminal null, 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/OStream I/O
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
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