¼öÁ¤³úÀÇ À§Å°
C ÇÁ·Î±×·¡¹Ö

¸ñ Â÷ #

Contents

1 ¸ñ Â÷
2 Sample Code
2.1 realloc()
2.2 ÇöÀç½Ã°£
2.3 strtok()¿Í strsep()

  • ¸ñÂ÷ÀÇ Ç׸ñ¹øÈ£¸¦ Ŭ¸¯Çϸé ÇØ´ç ³»¿ëÀ¸·Î À̵¿Çϸç
  • ¸ñÂ÷°¡ ¾Æ´Ñ Ç׸ñÁ¦¸ñ ¾ÕÀÇ Ç׸ñ¹øÈ£¸¦ Ŭ¸¯ÇÏ¸é ¸ñÂ÷³»¿ëÀ¸·Î À̵¿ÇÕ´Ï´Ù.

2 Sample Code #

2.1 realloc() #

  • µ¿ÀûÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ Å©±â¸¦ º¯°æ
  • ±âÁ¸ ÇҴ翵¿ªÀÇ Å©±â¸¦ Ãß°¡ÇÏ´Â °æ¿ì
    ÁÖ¾îÁø Å©±â¸¸Å­ÀÇ ¿µ¿µÀÌ ÃæºÐÇÏÁö ¾ÊÀ¸¸é »õ·Î¿î ¸Þ¸ð¸® ¿µ¿ªÀÌ ÇÒ´çµÇ¸ç
    ±âÁ¸ ¸Þ·Î¸®ÇÒ´ç ¿µ¿ªÀÇ µ¥ÀÌŸµµ ÀÚµ¿À¸·Î À̵¿ÇÏ°Ô µÈ´Ù.

  • ¿¹Á¦
    #include <stdio.h>
    #include <stdlib.h>
    
    #define EXTSIZE 1048576 /* 1MB */
    #define MYMSG   "Hello, World!"
    
    int main()
    {
        char *buf;
        char *newbuf;
        unsigned long bufsize;
        int i;
    
        bufsize = EXTSIZE;
        buf = malloc(bufsize);
        if(buf == NULL)
        {
            printf("ERROR - malloc()n");
            return 1;
        }
        sprintf(buf, MYMSG);
        printf("buffer address: %lX, size: %lu, data: %sn",
            (unsigned long)buf, bufsize, buf);
        getchar();
    
        for(i = 0; i < 1000; i++)
        {
            newbuf = realloc(buf, bufsize + EXTSIZE);
            if(newbuf == NULL)
            {
                printf("ERROR - realloc()n");
                free(buf);
                return 1;
            }
            bufsize = bufsize + EXTSIZE;
            printf("buffer address: %lX, size: %lu, data: %sn",
                (unsigned long)newbuf, bufsize, newbuf);
            if(newbuf != buf) getchar();
            buf = newbuf;
        }
    
        free(buf);
        return 0;
    }
    

  • ½ÇÇà
    buffer address: 40017008, size: 1048576, data: Hello, World!
    ...
    buffer address: 4011A008, size: 2097152, data: Hello, World!
    ...
    buffer address: 42133008, size: 32505856, data: Hello, World!
    ...
    

2.2 ÇöÀç½Ã°£ #

  • time(), ctime(), localtime()ÇÔ¼ö
  • ¿¹Á¦:
    #include <stdio.h>
    #include <time.h>
    
    int main()
    {
        time_t t;
        struct tm *tm_now;
    
    
        time(&t);
        printf("time()=%dn", t);
    
        printf("ctime()=%s", ctime(&t));
    
        tm_now = localtime(&t);
        printf("localtime()=%04d-%02d-%02d %02d:%02d:%02dn",
            tm_now->tm_year + 1900, tm_now->tm_mon, tm_now->tm_mday,
            tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
    
        return 0;
    }
    

2.3 strtok()¿Í strsep() #

  • strtok()¿Í strsep()ÇÔ¼ö´Â ÁöÁ¤ÇÑ ±¸ºÐÀÚ·Î ¹®ÀÚ¿­À» ºÐ¸®ÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.
  • µÎ°¡Áö ÇÔ¼ö ¸ðµÎ ´ë»ó¹®ÀÚ¿­ÀÇ °ªÀ» À¯ÁöÇÏÁö ¸øÇÕ´Ï´Ù.
    (±¸ºÐÀÚ·Î ÁöÁ¤µÈ ¹®ÀÚ¿­Àº '\0'·Î º¯È¯µÇ¾î ¹ö¸³´Ï´Ù.)
  • strtok()ÇÔ¼ö´Â ±¸ºÐÀÚ¿Í ±¸ºÐÀÚ »çÀÌÀÇ ³Î¹®ÀÚ¿­À» ºÐ¸®Çس»Áö ¸øÇÕ´Ï´Ù.
    (½ÇÇàÈ­¸éÀÇ ¸Ç¸¶Áö¸· ÀÔ·Â('hello||good')ÀÇ °á°ú ÂüÁ¶)
  • ¿¹Á¦
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define DELIMITER "|"
    
    int main()
    {
        char    buf[1024];
        char    tmp[1024];
        char    *cp, *pbuf, **ppbuf;
    
        do
        {
            printf("-----n");
            printf("value1|value2|value3 or quit:");
            scanf("%1023s", buf);
    
            if(!strcmp(buf, "quit")) return 0;
            printf("buf=%sn", buf);
    
            /* strtok() */
            printf("-- strtok()n");
    
            strcpy(tmp, buf);
            cp = strtok(tmp, "|");
            if(cp) printf("tvalue1=%sn", cp);
            cp = strtok(NULL, "|");
            if(cp) printf("tvalue2=%sn", cp);
            cp = strtok(NULL, "|");
            if(cp) printf("tvalue3=%sn", cp);
    
            /* strsep() */
            printf("-- strsep()n");
    
            strcpy(tmp, buf);
            pbuf = tmp;
            ppbuf = &pbuf;
            cp = strsep(ppbuf, "|");
            if(cp) printf("tvalue1=%sn", cp);
            cp = strsep(ppbuf, "|");
            if(cp) printf("tvalue2=%sn", cp);
            cp = strsep(ppbuf, "|");
            if(cp) printf("tvalue3=%sn", cp);
        }while(1);
    }
    
  • ½ÇÇà:
    -----
    value1|value2|value3 or quit:hello
    buf=hello
    -- strtok()
            value1=hello
    -- strsep()
            value1=hello
    -----
    value1|value2|value3 or quit:hello|bye
    buf=hello|bye
    -- strtok()
            value1=hello
            value2=bye
    -- strsep()
            value1=hello
            value2=bye
    -----
    value1|value2|value3 or quit:hello|bye|good
    buf=hello|bye|good
    -- strtok()
            value1=hello
            value2=bye
            value3=good
    -- strsep()
            value1=hello
            value2=bye
            value3=good
    -----
    value1|value2|value3 or quit:hello||good
    buf=hello||good
    -- strtok()
            value1=hello
            value2=good
    -- strsep()
            value1=hello
            value2=
            value3=good
    -----
    value1|value2|value3 or quit:quit
    
Login:
Password:
Join
A truly wise man never plays leapfrog with a Unicorn.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-01-03 14:12:19
Processing time 0.4861 sec