tail head cat sleep
QR code linking to this page

Man page  — PRINTF

명칭

printf, vprintf – 서식으로 변환해 출력

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <stdio.h>

int
printf(const char *format, ...);

int
fprintf(FILE *stream, const char *format, ...);

int
sprintf(char *str, const char *format, ...);

int
snprintf(char *str, size_t size, const char *format, ...);

int
asprintf(char **ret, const char *format, ...);
#include <stdarg.h>

int
vprintf(const char *format, va_list ap);

int
vfprintf(FILE *stream, const char *format, va_list ap);

int
vsprintf(char *str, const char *format, va_list ap);

int
vsnprintf(char *str, size_t size, const char *format, va_list ap);

int
vasprintf(char **ret, const char *format, va_list ap);

해설

printf() 패밀리의 함수는, 이하로 설명한다 format 에 따라 출력을 실시합니다. printf() (와)과 vprintf() (은)는, 표준 출력 stdout 에 출력을 실시합니다. fprintf() (와)과 vfprintf() (은)는, 지정된 출력 stream 에 출력을 실시합니다. sprintf(), snprintf(), vsprintf(), vsnprintf() (은)는, 캐릭터 캐릭터 라인 str 에 출력을 실시합니다. asprintf() (와)과 vasprintf() (은)는, malloc(3) 그리고 새로운 캐릭터 라인을 동적으로 할당합니다.

이러한 함수는, format 캐릭터 라인에 의한 제어에 따라 출력을 실시합니다. 이 캐릭터 라인은, 그 후의 인수 (또는 stdarg(3) 의 가변장 인수 기능으로 액세스 할 수 있는 인수) (을)를 출력용으로 변환하는 방법을 지정합니다.

이 함수는, 출력된 캐릭터수 (캐릭터 라인에의 출력을 종료하는, 마지막 ‘\0’ (은)는 포함하지 않는다)를 돌려줍니다. snprintf() (와)과 vsnprintf() 의 경우만, size 의 제한이 없었다고 하면(자) 출력되었을 것이다 캐릭터수 (와 같이 캐릭터 라인의 마지막 ‘\0’ (은)는 포함하지 않는다)를 돌려줍니다.

asprintf() (와)과 vasprintf() (은)는, 정형된 캐릭터 라인을 격납하는데 충분한 크기의 버퍼를 가리키는 포인터를 *ret (으)로 설정합니다. 할당할 수 있었던 area가 불필요하게 되었을 경우는, 이 포인터를 free(3) 에 건네주어 해방해 주세요. 충분한 area를 할당할 수 없는 경우, asprintf() (와)과 vasprintf() (은)는 -1 을 되돌려, ret (을)를 NULL 포인터로 설정합니다.

snprintf() (와)과 vsnprintf() (은)는, 최대로 size, Ns, -1 캐릭터만 출력 캐릭터 라인에 기입합니다 ( size 번째의 캐릭터는 종단의 ‘\0’ (이)가 됩니다). 반환값이 size 인수 이상인 경우는, 캐릭터 라인을 격납하려면 단인가 지났기 때문에, 출력된 캐릭터의 일부가 파기된 것이 됩니다.

sprintf() (와)과 vsprintf() (은)는, size 하지만 무한하다라고 가정합니다.

정형 캐릭터 라인은, 0 이상의 인스트럭션으로부터 구성되어 있습니다. 이 인스트럭션에는, 출력 스트림로 변경되지 않고 카피된다 통상 캐릭터 ( % 이외), 및 0 이상의 후속의 인수를 꺼내는 변환 지정이 있습니다. 각각의 변환 지정은, % 캐릭터로부터 시작됩니다. 인수는, (형태 확장의 뒤에) 변환 지시자에게 적절히 대응할 필요가 있습니다. % 의 후에는, 이하가 차례로 나타납니다.

필드폭이나 정밀도, 또는 그 양쪽 모두는, asterisk ‘*’ , 또는 숫자 캐릭터 라인 대신에 1 개(살) 이상의 10 진수와 ‘$’ 하지만 계속되는 asterisk로 지정할 수 있습니다. 이 경우, int 인수는 필드폭이나 정밀도를 제공합니다. 부의 필드폭은, 정의 필드폭이 계속되는 왼쪽 가지런히 하고 플래그로서 다루어집니다. 부의 정밀도는, 결핍 하고 있는 것으로서 다루어집니다. 1 개의 서식 인스트럭션에 위치 인수 (nn$) (와)과 위치 이외의 인수가 혼재하고 있는 경우, 결과는 미정도리가 됩니다.

변환 지시자와 그 의미는 다음과 같습니다.

diouxX
  int 인수 (또는 적절한 가변 인수)가, 부호 첨부 10 진 ( d (와)과 i) , 부호 없음 8 진 ( o) , 부호 없음 10 진 ( u) , 부호 없음 16 진 ( x (와)과 X) 에 변환됩니다. x 변환에는 캐릭터 abcdef , X 변환에는 캐릭터 ABCDEF 하지만 사용됩니다. 정밀도는, 출력하는 최저 자리수를 지정합니다. 변환치로 적은 자리수 밖에 필요없는 경우는, 왼쪽으로 0 이 붙습니다.
DOU long int 인수가, 부호 첨부 10 진, 부호 없음 8 진, 부호 없음 10 진에, 각각의 형식이 ld, lo, 및 lu 인것 같이 변환됩니다. 이 변환 캐릭터에는 문제가 있으므로, 최종적으로는 출력되지 않습니다.
eE double 인수를 말 수 있어 [- ]d .ddd e±dd 의 스타일에 변환됩니다. 소수점 이상은 1 자리수로, 소수점 이하의 자리수는 정밀도와 동일해집니다. 정밀도가 지정되어 있지 않은 경우는 6 이 가정됩니다. 정밀도가 0 인 경우, 소수점은 출력되지 않습니다. E 변환에서는, 캐릭터 E ( e (은)는 아니다)가 사용되어 지수가 도입됩니다. 지수에는, 최저 2 자리수가 항상 포함됩니다. 값이 0 인 경우, 지수는 00 이 됩니다.
f double 인수를 말 수 있어 [- ]ddd .ddd, 의 스타일로 10 진에 변환됩니다. 소수점 이하의 자리수는, 정밀도 지정에 동일해집니다. 정밀도가 지정되어 있지 않은 경우는 6 이 가정됩니다. 정밀도가 0 인 경우, 소수점은 출력되지 않습니다. 소수점이 출력되는 경우는, 소수점 이상으로 최저 1 자리수가 출력됩니다.
gG double 인수가, 스타일 f 인가 e ( G 변환의 경우는 E) 그리고 변환됩니다. 정밀도는 유효 자리수를 지정합니다. 정밀도가 지정되어 있지 않은 경우는 6 이 가정됩니다. 정밀도가 0 인 경우는 1 으로서 다루어집니다. 변환 후의 지수가 -4 보다 작은가 정밀도 이상인 경우는, 스타일 e 하지만 사용됩니다. 후속의 0 은, 결과의 소수부로부터 삭제됩니다. 소수점은, 소수점 이하에 최악이어도 1 자리수 있는 경우에 출력됩니다.
c int 인수가 unsigned char 에 변환되어 변환된 캐릭터가 출력됩니다.
s char * 인수가, 캐릭터형의 배열을 가리키는 포인터 (캐릭터 라인에의 포인터)(으)로 간주해집니다. 배열의 캐릭터는, 마지막 눌 캐릭터까지 출력됩니다 ( NULL 캐릭터는 출력되지 않습니다). 정밀도가 지정되어 있는 경우, 지정된 수이상은 출력되지 않기 때문에, NULL 캐릭터는 필요 없습니다. 정밀도가 지정되어 있지 않은 경우, 또는 정밀도가 배열의 사이즈 이상인 경우, 배열의 마지막에는 눌 캐릭터가 필요합니다.
p void * 포인터 인수가, 16 진으로 ‘(%#x’ 인가 ‘%#lx’ 에서의 같게) 출력됩니다.
n 지금까지 출력된 캐릭터수가, int * 포인터 인수 (또는 가변 포인터 인수) 하지만 지정하는 정수에 보존됩니다. 인수는 변환되지 않습니다.
% %’ 하지만 출력됩니다. 변환되는 인수는 없습니다. 완전한 변환 지정은 ‘%%’ 입니다.

필드폭이 존재하지 않는 경우, 또는 필드폭이 작은 경우에서도, 필드는 잘라 버릴 수 없습니다. 변환 결과가 필드폭보다 큰 경우, 필드는 변환 결과를 수용할 수 있게 될 때까지 확장됩니다.

weekday (와)과 month 하지만 캐릭터 라인에의 포인터인 경우에 "Sunday, July 3, 10:02" 그렇다고 하는 형식에서 일자와 시각을 출력하는 경우:
#include <stdio.h>
fprintf(stdout, "%s, %s %d, %. 2d:%. 2d\n",
        weekday, month, day, hour, min);

π 를 소수 제 5 위까지 출력하는 경우:

#include <math.h>
#include <stdio.h>
fprintf(stdout, "pi = %. 5f\n", 4 * atan(1.0));

128 바이트의 캐릭터 라인을 할당해, 거기에 출력하는 경우:

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
char *newfmt(const char *fmt, ...)
{
                char *p;
                va_list ap;
                if ((p = malloc(128)) == NULL)
                        return (NULL);
                va_start(ap, fmt);
                (void) vsnprintf(p, 128, fmt, ap);
                va_end(ap);
                return (p);
}

관련 항목

printf(1), scanf(3)

표준

fprintf(), printf(), sprintf(), vprintf(), vfprintf(), 및 vsprintf() 함수는, ISO/IEC 9899:1990 ("ISO C90") 에 적합하고 있습니다.

역사

asprintf() 함수와 vasprintf() 함수는, GNU C 프로그램 라이브러리에 추가되었습니다. 이것은, FreeBSD 2.2 그리고 Peter Wemm <peter@FreeBSD.org> 에 의해 실장되었습니다만, OpenBSD 2.3 그럼 후에 Todd C. Miller <Todd.Miller@courtesan.com> 의 시스템으로 옮겨놓을 수 있었습니다.

버그

변환 형식 %D, %O, 및 (은)는 표준적이 아니고, 하위 호환성을 유지하기 위해서(때문에) 제공되고 있습니다. %p 형식에 ( 0 플래그나 정밀도를 지정하는 것으로) 0 을 패딩 하는 것, %n 변환과 %p 변환으로 # 플래그를 지정하는 것, %Ld (와)과 같이 무의미한 편성은 표준적이지 않습니다. 이러한 편성은 피해 주세요.

sprintf() (와)과 vsprintf() 그럼 무한하게 긴 캐릭터 라인이 가정되므로, 호출측에서는 실제의 공간을 오버플로우 하지 않게 주의할 필요가 있습니다. 오버플로우 하지 않는 것을 프로텍션하는 것은 곤란합니다. 안전이기 때문에, 대신에 snprintf() 인터페이스를 사용해 주세요. 유감스럽지만, 이 인터페이스는 이식할 수 없습니다.


PRINTF (3) June 4, 1993

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

Some people open all the windows; wise wives welcome spring by moving the UNIX.