¡Ô ÇÁ·Î±×·¡¹Ö ¼ÒÇ° ¹× ÆÁ

 ¡å ¹®ÀÚ¿­ Á¶ÇÕ, À¯»ç sprintf

C++

N/A

Ç¥ÁØ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é¼­ ¹®ÀÚ¿­ ½ºÆ®¸µÀ» Á¶ÇÕÇؾßÇÏ´Â °æ¿ì°¡ »ý°Ü¼­ ¸¸µé¾î º¸¾Ò´Ù. ÀϹÝÀûÀ¸·Î sprintf()¸¦ ÅëÇØ ÇÒ ¼ö ÀÖ´Â °ÍÀÌÁö¸¸ ÀλýÀ» »ì´Ùº¸´Ï C Ç¥ÁØ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÒ ¶§µµ »ý°å´Ù. ±×·¸´Ù°í vprintf()¸¸Å­ÀÇ ¾Æ¸§´Ù¿î ±â´ÉÀ» ¿ä±¸ÇÏ´Â °Íµµ ¾Æ´Ï°í ´Ü¼øÈ÷ ½ºÆ®¸µ¿¡ ÇÊ¿äÇÑ ¼ýÀÚµéÀ» Á¶ÇÕÇϱâ À§Çؼ­ ÇÊ¿äÇß´ø °ÍÀ̶ó ÃÖ¼ÒÇÑÀÇ ±â´ÉÀ¸·Î ¸¸µé¾î º¸¾Ò´Ù.

ÀüüÀûÀ¸·Î sprintf()¿Í À¯»çÇÏÁö¸¸ format ½ºÆ®¸µ¿¡¼­ '@'·Î Ç¥½ÃµÈ °ÍÀ» ÆĶó¹ÌÅÍ·Î µé¾î¿Â ¼ýÀڷΠġȯÇÏ´Â °ÍÀÌ ´Ù¸¥ Á¡ÀÌ´Ù. ¿¹¸¦ µé¾î, "value = @, @"ÀÌ°í ÆĶó¹ÌÅÍ°¡ 100, 200À̶ó¸é "value = 100, 200"À̶ó´Â ¹®ÀÚ¿­À» ¸¸µé¾î µ¹·Á ÁÖ´Â °ÍÀÌ´Ù.

ÇÔ¼öÀÇ ¼±¾ðÀº ´ÙÀ½°ú °°´Ù.

void ComposeString(char pBuffer[], const char* szFormat, const int data...)

szFormat¿¡ ¹®ÀÚ¿­À» º¸³»ÁÖ°í µÚÀÇ data¿¡´Â ±×¿¡ ¸Â´Â Á¤¼öÇü ÆĶó¹ÌÅ͸¦ °¡º¯ÀûÀÎ °³¼ö·Î º¸³»ÁØ´Ù. ±×·¯¸é ±×°ÍÀ» ó¸®ÇÏ¿© pBuffer¿¡ µ¹·ÁÁÖ´Â ÇÔ¼öÀÌ´Ù. »ç¿ë ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.

    01: int main()
    02: {
    03:     char buffer[256];
    04:
    05:     ComposeString(buffer, "1 = @, 12 = @, -123 = @", 1, 12, -123);
    06:
    07:     puts(buffer);
    08:
    09:     return 0;
    10: }

´ÙÀ½Àº À§ÀÇ Äڵ带 ½ÇÇàÇßÀ» ¶§ÀÇ Ãâ·Â °á°úÀÌ´Ù.

    > 1 = 1, 12 = 12, -123 = -123

´ÙÀ½Àº À§ÀÇ ÇÔ¼ö¸¦ ±¸ÇöÇϱâ À§ÇÑ ÄÚµåÀÌ´Ù.

    01: static void s_Int2Str(char **ppBuffer, int value)
    02: {
    03:     if (value == 0)
    04:     {
    05:         *((*ppBuffer)++) = '0';
    06:     }
    07:     else
    08:     {
    09:         if (value < 0)
    10:         {
    11:             *((*ppBuffer)++) = '-';
    12:             value = -value;
    13:         }
    14:
    15:         int nNum = 0;
    16:         int temp = value;
    17:         while (temp)
    18:         {
    19:             temp = temp / 10;
    20:             ++nNum;
    21:         }
    22:
    23:         int nLoop = nNum;
    24:         while (nLoop-- > 0)
    25:         {
    26:             (*ppBuffer)[nLoop] = (value % 10) + '0';
    27:             value = value / 10;
    28:         }
    29:         *ppBuffer += nNum;
    30:     }
    31: }
    32:
    33: static void ComposeString(char pBuffer[],
    34:                           const char* szFormat, const int data...)
    35: {
    36:     if (pBuffer == 0)
    37:         return;
    38:
    39:     
    const int* pData = &data;
    40:
    41:     
    while (*szFormat)
    42:     {
    43:         if (*szFormat != '@')
    44:         {
    45:             *pBuffer++ = *szFormat++;
    46:             continue;
    47:         }
    48:         ++szFormat;
    49:         s_Int2Str(&pBuffer, *pData++);
    50:     }
    51:
    52:     *pBuffer = 0;
    53: }