C Func printf - sonkoni/Koni-Wiki GitHub Wiki

stdio.h

printf, fprintf, sprintf, snprintf

๋ฒ„ํผ๋‚˜ ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์„œ์‹ ์ถœ๋ ฅ

// ํ„ฐ๋ฏธ๋„๋กœ ์„œ์‹ ์ถœ๋ ฅ
int printf(const char *restrict format, ...);

// ํŒŒ์ผ๋กœ ์„œ์‹ ์ถœ๋ ฅ
int fprintf(FILE *restrict stream, const char *restrict format, ...);

// ๋ฌธ์ž์—ด๋ฒ„ํผ๋กœ ์„œ์‹์ถœ๋ ฅ
int sprintf(char *restrict buffer, const char *restrict format, ...);
int snprintf(char *restrict buffer, size_t bufsz, const char *restrict format, ...);

์„ฑ๊ณตํ•˜๋ฉด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜, ์‹คํŒจํ•˜๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. Hello ๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค๋ฉด 5๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ์‹์ด๋‹ค.

ํฌ๋ฉง ์ง€์ •์ž์— ๋งž๊ฒŒ ๋Œ€์น˜

์‚ฌ์šฉ: %[ํ”Œ๋ž˜๊ทธ][ํญ][.์ •๋ฐ€๋„][๊ธธ์ด]์„œ์‹์ง€์ •์ž ํ˜•ํƒœ

== ์„œ์‹์ง€์ •์ž ==
-----------------------------------------------------------------
%     : `%`๋ฅผ ๊ธฐํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด `%%`๋กœ ์จ์•ผ ํ•œ๋‹ค
d, i  : signed integer - ๋ถ€ํ˜ธ ์žˆ๋Š” 10์ง„ ์ •์ˆ˜
u     : ๋ถ€ํ˜ธ ์—†๋Š” 10์ง„ ์ •์ˆ˜
o     : ๋ถ€ํ˜ธ ์—†๋Š” 8์ง„ ์ •์ˆ˜
x     : ๋ถ€ํ˜ธ ์—†๋Š” 16์ง„ ์ •์ˆ˜(์†Œ๋ฌธ์ž)
X     : ๋ถ€ํ˜ธ ์—†๋Š” 16์ง„ ์ •์ˆ˜(๋Œ€๋ฌธ์ž)
f     : ์‹ค์ˆ˜๋ฅผ ์†Œ์ˆ˜์ ์œผ๋กœ ํ‘œ๊ธฐ(์†Œ๋ฌธ์ž)
F     : ์‹ค์ˆ˜๋ฅผ ์†Œ์ˆ˜์ ์œผ๋กœ ํ‘œ๊ธฐ(๋Œ€๋ฌธ์ž)
e     : ์‹ค์ˆ˜ ์ง€์ˆ˜ ํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉ(์†Œ๋ฌธ์ž)
E     : ์‹ค์ˆ˜ ์ง€์ˆ˜ ํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉ(๋Œ€๋ฌธ์ž)
a     : ์‹ค์ˆ˜๋ฅผ 16์ง„๋ฒ•์œผ๋กœ ํ‘œ๊ธฐ(์†Œ๋ฌธ์ž)
A     : ์‹ค์ˆ˜๋ฅผ 16์ง„๋ฒ•์œผ๋กœ ํ‘œ๊ธฐ(๋Œ€๋ฌธ์ž)
g     : ์‹ค์ˆ˜ `%f`์™€ `%e` ์ค‘์—์„œ ์งง์€ ๊ฒƒ์„ ์‚ฌ์šฉ(์†Œ๋ฌธ์ž)
G     : ์‹ค์ˆ˜ `%F`์™€ `%E` ์ค‘์—์„œ ์งง์€ ๊ฒƒ์„ ์‚ฌ์šฉ(๋Œ€๋ฌธ์ž)
c     : ๋ฌธ์ž(character)
s     : ๋ฌธ์ž์—ด(string)
p     : ํฌ์ธํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ
n     : ๊ฐฏ์ˆ˜. `%n` ๋ถ€๋ถ„์— int ํฌ์ธํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ์ถœ๋ ฅํ•œ ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๊ฝ‚์•„์คŒ

== ํ”Œ๋ž˜๊ทธ ==
-----------------------------------------------------------------
-     : ์™ผ์ชฝ ์ •๋ ฌ
+     : ์–‘์ˆ˜์ผ ๋•Œ๋Š” + ๋ถ€ํ˜ธ, ์Œ์ˆ˜์ผ ๋•Œ๋Š” - ๋ถ€ํ˜ธ ์ถœ๋ ฅ
SPACE : ์–‘์ˆ˜์ผ ๋•Œ๋Š” ๋ถ€ํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ณต๋ฐฑ์œผ๋กœ ํ‘œ์‹œ, ์Œ์ˆ˜ ์ผ ๋•Œ๋Š” - ๋ถ€ํ˜ธ ์ถœ๋ ฅ
#     : ์ง„๋ฒ•์— ๋งž๊ฒŒ ์ˆซ์ž ์•ž์— 0, 0x, 0X๋ฅผ ๋ถ™์ž„
0     : ์ถœ๋ ฅํ•˜๋Š” ํญ์˜ ๋‚จ๋Š” ๊ณต๊ฐ„์— 0์œผ๋กœ ์ฑ„์›€


== ํญ ==
-----------------------------------------------------------------
์ˆซ์ž   : ์ง€์ •ํ•œ ์ˆซ์ž๋งŒํผ ํญ์„ ์ง€์ •ํ•˜์—ฌ ์ถœ๋ ฅ, ์‹ค์ˆ˜๋Š” .(์ ), e+๊นŒ์ง€ ํญ์— ํฌํ•จ๋จ


== ์ •๋ฐ€๋„ ==
-----------------------------------------------------------------
.์ˆซ์ž  : ์ง€์ •ํ•œ ์ˆซ์ž๋งŒํผ ์†Œ์ˆ˜์  ์•„๋ž˜ ์ž๋ฆฌ ์ถœ๋ ฅ


== ์„œ์‹ ์ง€์ •์ž ๊ธธ์ด ==
    d i         u o x X              f F e E a A g G    c        s         p        n
-----------------------------------------------------------------------------------------------
    int         unsigned int         float, double      int      char *    void *   int *
hh  char        unsigned char                                                       char *
h   short       unsigned short                                                      short int *
l   long        unsigned long        double             wint_t   wchar_t *          long int *
ll  long long   unsigned long long                                                  long long *
j   intmax_t    uintmax_t                                                           intmax_t *
z   size_t      size_t                                                              size_t *
t   ptrdiff_t   ptrdiff_t                                                           ptrdiff_t *
L                                    long double
-----------------------------------------------------------------------------------------------

ํฌ๋ฉง์ถœ๋ ฅ๊ณผ ๊ฐฏ์ˆ˜๋ฐ˜ํ™˜

int count = printf("Hello");
// Hello ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  count ์—๋Š” 5๊ฐ€ ๋‹ด๊ธด๋‹ค.

๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์„œ์‹ ํ˜•ํƒœ

              type    printf     literal
-----------------------------------------
              char    %c %d
     unsigned char    %c %u
     char *           %s
-----------------------------------------
             short    %d
               int    %d
              long    %ld        l, L
         long long    %lld       ll, LL
-----------------------------------------
    unsigned short    %u         u, U
      unsigned int    %u         u, U
     unsigned long    %lu        ul, UL
unsigned long long    %llu       ull, ULL
-----------------------------------------
             float    %f, %e     f, F    ์†Œ์ˆ˜์š”ํšจ  6(FLT_DIG)
            double    %f, %e             ์†Œ์ˆ˜์š”ํšจ 15(DBL_DIG)
       long double   %Lf, %Le    l, L    ์†Œ์ˆ˜์š”ํšจ 18(LDBL_DIG)
-----------------------------------------
            size_t    %zu
           pointer    %p
long long num1 = 123456789123456789LL;
float num2 = 123.123456f;
printf("num1 long long : %lld\n", num1);
printf("num2 float     : %f\n", num2);
printf("num2 float     : %e\n", num2);

// num1 long long : 123456789123456789
// num2 float     : 123.123459
// num2 float     : 1.231235e+02
// 6์นธ์— ๋งž์ถฐ ์ถœ๋ ฅ
printf("%6d\n", 20);
printf("%6d\n", 200000);
// โฃโฃโฃโฃ20
// 200000

// 6์นธ์— ๋งž์ถ”๊ณ , ์—ฌ๋ฐฑ์€ 0์œผ๋กœ ์ฑ„์šฐ๊ธฐ
printf("%06d\n", 20);
// 000020

// ๋ถ€ํ˜ธ ๋ฌด์กฐ๊ฑด ์ถœ๋ ฅ
printf("%+d\n", 10);
printf("%+d\n", -10);
// +10
// -10

// ์†Œ์ˆ˜์  ๋‘˜์งธ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅ
printf("%.2f\n", 3.141592);
// 3.14

// 8์ง„์ˆ˜๋กœ ์ถœ๋ ฅ
printf("%#o (%d)\n", 0721, 0721); // 8์ง„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ด๋ผ๋ฉด ์•ž์— 0 ๋ถ™์ž„
// 0721

// 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ
printf("%#x (%d)\n", 0xf1, 0xf1); // 16์ง„์ˆ˜ ์ž…๋ ฅ๊ฐ’์ด๋ผ๋ฉด ์•ž์— 0x ๋ถ™์ž„
// 0xf1

์„œ์‹์— * ๋ฅผ ๋ถ™์—ฌ ์ž๋ฆฟ์ˆ˜ ์ •ํ•˜๊ธฐ

#include <stdio.h>
#include <float.h>
int main(int argc, char *argv[]) {

    // printf("%*d", ์ž๋ฆฟ์ˆ˜, ์ถœ๋ ฅ๊ธ€์ž);
    printf("%5d\n", 123);    // %5d ๋Š” %+5d ์™€ ๋™์ผํ•จ. ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ๋จ.
    printf("%*d\n", 5, 123); // ์„œ์‹์— * ๋ฅผ ์“ฐ๊ณ , ์ž๋ฆฟ์ˆ˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.
    // 5์ž๋ฆฌ์— ๋งž์ถฐ ์ถœ๋ ฅ๋œ๋‹ค.
    // โฃโฃ123
    // โฃโฃ123

    printf("%.*f\n", FLT_DIG, 3.123456789123456789f);
    printf("%.*f\n", DBL_DIG, 3.123456789123456789);
    printf("%.*Lf\n", LDBL_DIG, 3.123456789123456789l);
    // ์‹ค์ˆ˜์˜ ์ž๋ฆฟ์ˆ˜ ์ •๋ฐ€๋„์— ๋”ฐ๋ผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
    // 3.123457
    // 3.123456789123457
    // 3.123456789123456789

    return 0;
}

sprintf ๋ฌธ์ž์—ด๋ฒ„ํผ๋กœ ์„œ์‹์ถœ๋ ฅ

ํŠน์ • ์„œ์‹์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

#include <stdio.h>
int main(int argc, char *argv[]) {
    char buffer[20];
    sprintf(buffer, "Hello, %s", "World");
    //      ====== ๋ฌธ์ž์—ด ํฌ์ธํ„ฐ์„ ์ง€์ •ํ•˜๋ฉด ์„œ์‹์œผ๋กœ ์ €์žฅ๋œ๋‹ค.
    printf("%s\n", buffer);
    return 0;
}
// Hello, World

์ฐธ๊ณ 

โš ๏ธ **GitHub.com Fallback** โš ๏ธ