sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
문자열에 서식이 지정된 데이터를 씁니다. 일부 기능의 더 안전한 버전을 사용할 수 있습니다. sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l을 참조하십시오. 보안 버전의 swprintf 및 _swprintf_l는 count 매개 변수를 사용하지 않습니다.
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
template <size_t size>
int swprintf(
wchar_t (&buffer)[size],
const wchar_t *format [,
argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
wchar_t (&buffer)[size],
const wchar_t *format,
locale_t locale [,
argument] ...
); // C++ only
매개 변수
buffer
출력을 위한 저장소 위치count
이 함수의 유니코드 버전을 저장하는 문자의 최대 수.format
형식 컨트롤 문자열argument
선택적 인수locale
사용할 로캘입니다.
자세한 내용은 형식 사양을 참조하십시오.
반환 값
기록된 문자 수이며, 오류가 발생한 경우는 -1입니다. 매개 변수 유효성 검사에 설명된 대로 buffer 또는 format이 null 포인터인 경우 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우, 이러한 함수는 -1을 반환하고 errno를 EINVAL로 설정합니다.
sprintf는 종료 null 문자를 제외하고 buffer에 저장된 바이트 수를 반환합니다. swprintf 은 종료 null와이드 문자를 제외하고, buffer 에 저장된 와이드 문자의 수를 반환합니다.
설명
sprintf 함수는 일련의 문자 및 값의 서식을 지정하고 buffer에 저장합니다. 각 argument(있는 경우)가 format의 해당 형식 사양에 따라 변환되어 출력됩니다. 형식은 일반 문자로 구성되어 있으며, printf를 위한 format 인수와 동일한 형태와 기능을 가지고 있습니다. 기록된 마지막 문자 뒤에 null 문자가 추가됩니다. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.
보안 정보 |
---|
sprintf를 사용하면 작성된 문자 수를 제한할 방법이 없습니다. 즉 sprintf를 사용하는 코드는 버퍼 오버런이 발생할 수 있습니다.buffer에 기록할 최대 문자 수를 지정하는 관련 함수 _snprintf를 사용하거나, _scprintf를 사용하여 필요한 버퍼 크기를 확인하십시오.format이 사용자 정의 문자열이 아닌지도 확인하십시오. |
swprintf는 sprintf의 와이드 문자 버전이며, swprintf에 대한 포인터 인수는 와이드 문자 문자열입니다. swprintf에서 인코딩 오류의 탐지 방식은 sprintf와 다를 수 있습니다. swprintf 및 fwprintf 는 동일하게 작동하지만, swprintf 는 FILE 형식의 대상 이외의 문자열에 출력을 기록하고, swprintf 의 경우에는 count매개 변수로 작성할 최대 문자 수를 지정해야 합니다. _l 접미사가 있는 이러한 함수 버전은 현재 스레드 로캘 대신 전달된 로캘 매개 변수를 사용하는 경우를 제외하고는 동일합니다.
swprintf는 size_t 형식의 두 번째 매개 변수인 count를 요구하는 ISO C 표준을 준수합니다. 이전의 비표준 동작을 강제로 적용하려면 _CRT_NON_CONFORMING_SWPRINTFS를 정의합니다. 이후 버전에서는 이전 동작이 제거되므로 새로운 동작에 맞게 코드를 변경해야 합니다.
C++에서 이러한 함수는 보다 최신의 보안 대응 함수를 호출하는 템플릿 오버로드를 갖고 있습니다. 자세한 내용은 안전한 템플릿 오버로드을 참조하십시오.
제네릭 텍스트 라우팅 매핑
TCHAR.H 루틴 |
_UNICODE 및 _MBCS 정의되지 않음 |
_MBCS 정의됨 |
_UNICODE 정의됨 |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
요구 사항
루틴 |
필수 헤더 |
---|---|
sprintf, _sprintf_l |
<stdio.h> |
swprintf, _swprintf_l |
<stdio.h> 또는 <wchar.h> |
호환성에 대한 자세한 내용은 소개 단원의 호환성 부분을 참조하십시오.
예제
// 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 );
}
// 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 );
}
해당 .NET Framework 항목
참고 항목
참조
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l