std:: printf, std:: fprintf, std:: sprintf, std:: snprintf
|
헤더 파일에 정의됨
<cstdio>
|
||
|
int
printf
(
const
char
*
format, ...
)
;
|
(1) | |
|
int
fprintf
(
std::
FILE
*
stream,
const
char
*
format, ...
)
;
|
(2) | |
|
int
sprintf
(
char
*
buffer,
const
char
*
format, ...
)
;
|
(3) | |
|
int
snprintf
(
char
*
buffer,
std::
size_t
buf_size,
const
char
*
format, ...
)
;
|
(4) | (C++11부터) |
주어진 위치에서 데이터를 로드하고, 이를 문자 문자열 등가물로 변환한 후 다양한 싱크에 결과를 기록합니다.
sprintf
또는
snprintf
호출이 겹치는 객체 간에 복사가 발생하도록 하는 경우, 동작은 정의되지 않습니다 (예:
sprintf
(
buf,
"%s text"
, buf
)
;
).
내용매개변수
format
문자열은 출력 스트림에 변경 없이 복사되는 일반 바이트 문자(
다음 형식 지정자를 사용할 수 있습니다:
반환값
1,2)
성공 시 기록된 문자 수 또는 오류 발생 시 음수 값.
3)
성공 시 기록된 문자 수(종료 널 문자는 제외) 또는 오류 발생 시 음수 값.
4)
성공 시 충분히 큰 버퍼에 기록되었을 문자 수(종료 널 문자는 제외), 또는 오류 발생 시 음수 값. 따라서 (널 종료) 출력이 완전히 기록된 것은 반환된 값이 음수가 아니고
buf_size
보다 작은 경우에만 해당합니다.
참고POSIX는 라는 것은 errno 가 오류 시 설정되도록 명시합니다. 또한 추가 변환 지정자, 특히 인수 재정렬 지원을 명시합니다 ( 호출하는 auto fmt = "sqrt(2) = %f";
int sz = std::snprintf(nullptr, 0, fmt, std::sqrt(2));
std::vector<char> buf(sz + 1); // note +1 for null terminator
std::sprintf(buf.data(), fmt, std::sqrt(2)); // certain to fit
예제
이 코드 실행
#include <cinttypes> #include <cstdint> #include <cstdio> #include <limits> int main() { const char* s = "Hello"; std::printf("Strings:\n"); // same as std::puts("Strings:"); std::printf("\t[%10s]\n", s); std::printf("\t[%-10s]\n", s); std::printf("\t[%*s]\n", 10, s); std::printf("\t[%-10.*s]\n", 4, s); std::printf("\t[%-*.*s]\n", 10, 4, s); std::printf("Characters:\t%c %%\n", 'A'); std::printf("Integers:\n"); std::printf("\tDecimal: \t%i %d %.6i %i %.0i %+i %i\n", 1, 2, 3, 0, 0, 4,-4); std::printf("\tHexadecimal:\t%x %x %X %#x\n", 5,10,10, 6); std::printf("\tOctal: \t%o %#o %#o\n", 10, 10, 4); std::printf("Floating point:\n"); std::printf("\tRounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3); std::printf("\tPadding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5); std::printf("\tScientific:\t%E %e\n", 1.5, 1.5); std::printf("\tHexadecimal:\t%a %A\n", 1.5, 1.5); std::printf("\tSpecial values:\t0/0=%g 1/0=%g\n", 0.0/0.0, 1.0/0.0); std::printf("Variable width control:\n"); std::printf("\tright-justified variable width: '%*c'\n", 5, 'x'); int r = std::printf("\tleft-justified variable width : '%*c'\n", -5, 'x'); std::printf("(the last printf printed %d characters)\n", r); std::printf("Fixed-width types:\n"); std::uint32_t val = std::numeric_limits<std::uint32_t>::max(); std::printf("\tLargest 32-bit value is %" PRIu32 " or %#" PRIx32 "\n", val, val); } 가능한 출력: Strings: [ Hello] [Hello ] [ Hello] [Hell ] [Hell ] Characters: A % Integers: Decimal: 1 2 000003 0 +4 -4 Hexadecimal: 5 a A 0x6 Octal: 12 012 04 Floating point: Rounding: 1.500000 2 1.30000000000000004440892098500626 Padding: 01.50 1.50 1.50 Scientific: 1.500000E+00 1.500000e+00 Hexadecimal: 0x1.8p+0 0X1.8P+0 Special values: 0/0=-nan 1/0=inf Variable width control: right-justified variable width: ' x' left-justified variable width : 'x ' (the last printf printed 41 characters) Fixed-width types: Largest 32-bit value is 4294967295 or 0xffffffff 참고 항목
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||