10-4-´Ù.µ¿Àû ¹®ÀÚ¿­ ¹è¿­

ÀÌ¹Ì ¾Ë¾Æº¸¾ÒµíÀÌ ¹è¿­À» ¼±¾ðÇÒ ¶§ ±× Å©±â´Â ¹Ýµå½Ã »ó¼ö·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÒ ¼ö´Â ¾ø´Ù.

 

int len=¿øÇÏ´Â °ª;

char name[len];

 

¿©±â¼­ lenÀº ÇÔ¼öÀÇ Àμö·Î Àü´ÞµÇ¾ú°Å³ª ¶Ç´Â »ç¿ëÀڷκÎÅÍ ÀÔ·ÂµÈ °ª, Áï ½ÇÇàÁß¿¡ °áÁ¤µÇ´Â °ªÀ̶ó°í »ý°¢ÇÏÀÚ. ÄÄÆÄÀÏ·¯´Â ¹è¿­À» ¼±¾ðÇÒ ½ÃÁ¡¿¡ Å©±â¸¦ ¾Ë¾Æ¾ß ÇϹǷΠº¯¼ö·Î ¹è¿­ Å©±â¸¦ ÁöÁ¤ÇÒ ¼ö´Â ¾øÀ¸¸ç ½ÇÇàÁß¿¡ °¡º¯ÀûÀÎ Å©±âÀÇ ¹è¿­À» »ý¼ºÇÏ·Á¸é µ¿Àû ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼öÀÎ malloc ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¾Õ¿¡¼­ ÀÌ¹Ì ½Ç½ÀÇØ º» ³»¿ëÀε¥ À̸¦ Á» ´õ ÀϹÝÈ­ÇÏ¿© µ¿Àû ÇÒ´çÀ» ÅëÇØ °¡º¯ Å©±âÀÇ ¹è¿­À» ¸¸µå´Â °ø½ÄÀ» À¯µµÇØ º¸ÀÚ. ÀÓÀÇÀÇ Å¸ÀÔ TÇüÀÇ ¿ä¼Ò n°³¸¦ °¡Áö´Â ¹è¿­À» ½ÇÇàÁß¿¡ »ý¼ºÇÏ´Â ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ Á¤¸®ÇÒ ¼ö ÀÖ´Ù.

 

T *p;

p=(T *)malloc(n*sizeof(T));

 

ÃÑ ÇÒ´ç Å©±â´Â °³¼ö n¿¡ TÇü ŸÀÔÀÇ Å©±â¸¦ °öÇÑ ¹ÙÀÌÆ® ¼öÀ̸ç malloc ÇÔ¼ö·Î ÇÒ´çµÇ´Â ¸Þ¸ð¸®´Â À̸§ÀÌ ¾ø±â ¶§¹®¿¡ ½ÃÀÛ ¹øÁö¸¦ ¹Ýµå½Ã Æ÷ÀÎÅÍ º¯¼ö·Î ´ëÀÔ¹Þ¾Æ¾ß »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ TÇü Æ÷ÀÎÅÍ p¸¦ ¼±¾ðÇÏ°í mallocÀÌ ¸®ÅÏÇÏ´Â ¹øÁö¸¦ ´ëÀÔÇ쵂 (T *) ŸÀÔÀ¸·Î ij½ºÆÃÇß´Ù. µ¿Àû ÇÒ´çÀÇ °á°ú p´Â TÇü ¿ä¼Ò n°³¸¦ °¡Áö´Â ¹è¿­Ã³·³ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ °ø½Ä¿¡ µû¶ó Å©±â lenÀÇ ¹®ÀÚÇü ¹è¿­À» »ý¼ºÇÏ´Â ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÈ´Ù.

 

int len;

scanf("%d",&len);

char *name;

name=(char *)malloc(len*sizeof(char));

// name »ç¿ë

free(name);

 

lenÀÇ °ªÀº ½ÇÇàÁß¿¡ ÁÖ¾îÁö¸ç mallocÀº ÀÌ Å©±â¸¸Å­ÀÇ ¹®ÀÚÇü ¹è¿­À» ÇÒ´çÇÑ´Ù. lenÀÌ 10ÀÌ°Ç 1000ÀÌ°Ç »ó°ü¾øÀÌ ¸»ÀÌ´Ù. ÀÌ ÇÒ´ç¿¡ ÀÇÇØ nameÀº lenÀÇ Å©±â¸¦ °¡Áö´Â ¹®ÀÚÇü ¹è¿­ÀÌ µÇ¸ç ÀÌ´Â °ð len-1°³ÀÇ ¹®ÀÚ¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Â ¹®ÀÚ¿­ÀÌ µÈ´Ù´Â ¶æÀÌ´Ù. ÀÌ Äڵ带 ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ÀÌÇØÇß´Ù¸é ¶È°°Àº ¹æ¹ý´ë·Î Á» ´õ Â÷¿øÀÌ ³ôÀº Äڵ嵵 ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

ÀÚ, ÀÌÁ¦ ¿ä±¸¸¦ Á» ´õ È®ÀåÇÏ¿© ÀÌ·± ¹®ÀÚ¿­(=¹®ÀÚÇü ¹è¿­)ÀÌ ¿©·¯ °³ ÇÊ¿äÇÏ¸ç ±× °³¼öµµ ½ÇÇàÁß¿¡¸¸ ¾Ë ¼ö ÀÖ´Ù°í ÇÏÀÚ. Áï °¡º¯ ±æÀÌ(len)ÀÇ ¹®ÀÚÇü ¹è¿­À» °¡º¯ °³¼ö(num)¸¸Å­ »ý¼ºÇØ¾ß Çϴµ¥ ¹æ¹ýÀº ¾Õ¿¡¼­ name ¹è¿­À» ¸¸µç °Í°ú µ¿ÀÏÇÏ´Ù. °á°ú Äڵ带 º¸ÀÌ¸é ´ÙÀ½°ú °°´Ù.

 

¿¹ Á¦ : DynStrArray

#include <Turboc.h>

 

void main()

{

     int len=10,num=5,i;

     char **name;

 

     name=(char **)malloc(num*sizeof(char *));

     for (i=0;i<num;i++) {

          name[i]=(char *)malloc(len*sizeof(char));

     }

 

     for (i=0;i<num;i++) {

          sprintf(name[i],"string %d",i);

          puts(name[i]);

     }

 

     for (i=0;i<num;i++) {

          free(name[i]);

     }

     free(name);

}

 

lenÀº ¹®ÀÚ¿­ÀÇ ±æÀÌÀ̸ç numÀº ÀÌ·± ¹®ÀÚ¿­ÀÇ °³¼öÀε¥ µÑ ´Ù º¯¼öÀ̹ǷΠ½ÇÇàÁß¿¡ »ç¿ëÀÚ³ª ¿ÜºÎ¿¡¼­ ÁÖ¾îÁö´Â °ªÀÌ´Ù. ¿¹Á¦¿¡¼­´Â ÆíÀÇ»ó ¼±¾ð¹®¿¡¼­ 10°ú 5·Î ÃʱâÈ­ÇßÁö¸¸ ÀÌ °ªÀº ¾ðÁ¦µçÁö ¹Ù²ð ¼ö ÀÖ´Ù. ¹®Á¦¸¦ ¿ä¾àÇÏÀÚ¸é len ±æÀÌÀÇ char *ÇüÀ» ¿ä¼Ò·Î °¡Áö´Â num Å©±âÀÇ ¹è¿­À» µ¿ÀûÀ¸·Î ÇÒ´çÇÏ´Â °ÍÀÌ´Ù. ¿ä¼ÒÀÇ Å¸ÀÔÀº char *ÀÌ°í Å©±â´Â numÀ̹ǷΠ°ø½Ä´ë·Î ÀÛ¼ºÇØ º¸¸é ´ÙÀ½°ú °°Àº Äڵ带 ¾òÀ» ¼ö ÀÖ´Ù.

 

char **p;

p=(char **)malloc(num*sizeof(char *))

 

¸¸¾à ÀÌ ¹®ÀåÀÌ ÀÌÇصÇÁö ¾Ê´Â´Ù¸é typedef char *PC ¼±¾ðÀ¸·Î char *ÇüÀ» PC ŸÀÔÀ¸·Î Á¤ÀÇÇÑ ÈÄ °ø½Ä¿¡ µû¶ó PCÇü ¹è¿­À» µ¿ÀûÀ¸·Î ÇÒ´çÇÏ´Â Äڵ带 ÀÛ¼ºÇØ º¸¾Æ¶ó. ±×¸®°í ÀÌ·¸°Ô ÀÛ¼ºµÈ Äڵ忡¼­ PC¸¦ ´Ù½Ã char *·Î ´ëüÇÏ¸é ¹Ù·Î À§ÀÇ ¹®ÀåÀÌ ³ª¿Â´Ù. charÇüÀÇ ¹è¿­À» ÇÒ´çÇÒ ¶§ char *Çü º¯¼ö°¡ ÇÊ¿äÇÑ °Íó·³ char *ÇüÀÇ ¹è¿­À» µ¿Àû ÇÒ´çÇÒ ¶§´Â char **Çü, Áï ÀÌÁß Æ÷ÀÎÅÍ º¯¼ö°¡ ÇÊ¿äÇÑ °ÍÀÌ´Ù.

ÀÌ ÇÒ´ç¿¡ ÀÇÇØ nameÀº num°³ÀÇ char *ÇüÀ¸·Î ±¸¼ºµÈ ¹è¿­ÀÌ µÇ´Âµ¥ mallocÀº ÇҴ縸 ÇÏÁö ÃʱâÈ­´Â ÇÏÁö ¾ÊÀ¸¹Ç·Î name ¹è¿­Àº ¾²·¹±â °ªÀ» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ 0~num±îÁö ·çÇÁ¸¦ µ¹¸ç nameÀÇ °¢ ¿ä¼Ò¿¡ ´ëÇØ ´Ù½Ã ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© len ±æÀÌÀÇ ¹®ÀÚÇü ¹è¿­À» ¸¸µé¸é nameÀº 2Â÷¿ø ¹®ÀÚÇü ¹è¿­ÀÌ µÇ¸ç °³³äÀûÀ¸·Î 1Â÷¿ø ¹®ÀÚ¿­ ¹è¿­À̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÇÒ´çÀÌ ¿Ï·áµÈ ÈÄÀÇ ¸Þ¸ð¸® ¸ð¾çÀ» ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù.

Á¤ÀûÀ¸·Î ¼±¾ðÇÑ º¯¼ö´Â name»ÓÀÌ¸ç ³ª¸ÓÁö´Â ¸ðµÎ µ¿ÀûÀ¸·Î ÇÒ´çµÈ °ÍµéÀÌ´Ù. nameÀÌ °¡¸®Å°´Â °÷¿¡´Â Å©±â numÀÇ char * ¹è¿­ÀÌ ÀÖ°í ÀÌ ¹è¿­ÀÇ ¿ä¼ÒµéÀÌ °¡¸®Å°´Â °÷¿¡´Â ¶Ç len ±æÀÌÀÇ char ¹è¿­ÀÌ ÀÖ´Ù. ¿ªÀ¸·Î ¸»ÇÏÀÚ¸é char ¹è¿­Àº char *¿¡ ÀÇÇØ ÂüÁ¶µÇ¸ç ÀÌ·± char *µéÀÇ ÁýÇÕÀ» nameÀÌ °¡¸®Å°°í ÀÖÀ¸´Ï nameÀÇ Å¸ÀÔÀº char **°¡ µÇ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù.

°¢ ¹®ÀÚ¿­µéÀÌ ¸Þ¸ð¸®»óÀÇ ¾îµð¿¡ ÇÒ´çµÉÁö´Â ¾Ë ¼ö ¾øÁö¸¸ nameÀ» ÅëÇØ ÀÌ ¹®ÀÚ¿­ÀÇ ½ÃÀÛ ¹øÁö¸¦ °¡Áö´Â ¹è¿­À» ãÀ» ¼ö ÀÖ°í ÀÌ ¹è¿­·ÎºÎÅÍ °¢ ¹®ÀÚ¿­¿¡ Á¢±ÙÇÑ´Ù. ÀÌ °æ¿ì nameÀº µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¹®ÀÚ¿­¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ °æ·ÎÀÌ¸ç ±× ÀÚü´Â °³³äÀûÀ¸·Î ¹®ÀÚ¿­ ¹è¿­ÀÇ ÀÚ°ÝÀ» °¡Áø´Ù. °ú¿¬ nameÀÌ º¹¼ö °³ÀÇ ¹®ÀÚ¿­À» Àß ÀúÀåÇÏ´ÂÁö È®ÀÎÇØ º¸±â À§ÇØ ·çÇÁ¸¦ µ¹¸ç "string n"À̶ó´Â ¹®ÀÚ¿­À» ÀúÀåÇØ º¸°í Ãâ·Âµµ ÇØ º¸¾Ò´Ù. ¹°·Ð Àß µÈ´Ù.

 

string 0

string 1

string 2

string 3

string 4

 

µ¿ÀûÀ¸·Î ÇÒ´çÇÑ ¹è¿­À» ÇØÁ¦ÇÒ ¶§´Â name ¹è¿­ÀÇ °¢ ¿ä¼Ò°¡ °¡¸®Å°´Â ¸Þ¸ð¸® ºí·ÏÀ» ¼ø¼­´ë·Î ÇØÁ¦ÇÏ°í ¸¶Áö¸·À¸·Î nameÀÌ °¡¸®Å°´Â ¹è¿­À» ÇØÁ¦ÇÑ´Ù. ¼ø¼­¸¦ ¹Ù²ã ÇØÁ¦Çϸé ÇÏÀ§ ºí·ÏÀÇ ¹øÁö¸¦ ÀÒ¾î¹ö¸®¹Ç·Î ÀϺθ¦ ÇØÁ¦ÇÒ ¼ö ¾ø°Ô µÉ °ÍÀÌ´Ù. name ±× ÀÚü´Â Áö¿ªÀûÀ¸·Î ¼±¾ðµÈ Æ÷ÀÎÅÍ º¯¼öÀ̹ǷΠÇØÁ¦ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.