5. ¹®ÀÚ¿°ú ¹è¿ À¯Æ¿¸®Æ¼
¹®ÀÚ¿(¶Ç´Â ¹®ÀÚÀÇ ¹è¿) 󸮴 ¸¹Àº ÇÁ·Î±×·¥¿¡ ÀÖ¾î Áß¿äÇÑ ºÎºÐÀÌ´Ù.GNU C ¶óÀ̺귯¸®´Â ¸¹ Àº ¹®ÀÚ¿ À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ Á¦°øÇϴµ¥,¿©±â¿¡´Â ¹®ÀÚ¿ÀÇ º¹»ç, ¿¬°á, ºñ±³, °Ë»öÀ» À§ÇÑ ÇÔ¼öµéÀÌ Æ÷ÇԵǾî ÀÖ´Ù.¸¹Àº ¹®ÀÚ¿ ó¸®ÇÔ¼öµéÀº ÀúÀå¼ÒÀÇ ÀÓÀÇÀÇ ±¸¿ªÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù; ¿¹ÄÁµ¥, memcpy ÇÔ¼ö´Â ¾î¶°ÇÑ Á¾·ùÀÇ ¹è¿ ³»¿ëµµ º¹»çÇØ ³¾ ¼ö ÀÖ´Ù.
Ãʺ¸ C ÇÁ·Î±×·¡¸ÓµéÀÌ ÀÚ½ÅÀÇ ÄÚµå·Î ÀÌ ±â´ÉÀ» Áߺ¹µÇ°Ô ÀÛ¼ºÇÏ¿© "µµ±¸¸¦ Àç¹ß¸í"ÇÏ´Â ÀÏÀº ³Ê ¹«µµ ÈçÇÑ ÀÏÀÌ´Ù.±×·¯³ª ±×·¸°Ô ÇÔÀ¸·Î½á ¶óÀ̺귯¸® ÇÔ¼öµé¿¡ Ä£¼÷ÇØÁö°í ±×°ÍµéÀ» »ç¿ëÇÒ ¼ö ÀÖ °ÔµÇ¹Ç·Î,ÀÌ·¯ÇÑ ÀÏÀº À¯Áö,È¿À²¼º,¿î¿ë¿¡ ÀÌÁ¡À» Á¦°øÇÏ´Â ¼ÀÀÌ´Ù.
¿¹ÄÁµ¥,´ç½ÅÀº 2ÇàÀÇ C Äڵ忡¼ ÇϳªÀÇ ¹®ÀÚ¿À» ´Ù¸¥ ¹®ÀÚ¿°ú ½±°Ô ºñ±³ÇÒ ¼ö ÀÖ´Ù.¸¸¾à ´ç½ÅÀÌ ±âÁ¸ÀÇ strcmpÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ½Ç¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.¶ÇÇÑ ÀÌ·¯ÇÑ ¶óÀ̺귯¸® ÇÔ¼öµéÀº ÀüÇüÀûÀ¸·Î ¸Å¿ì ÃÖÀûȵǾî ÀÖÀ¸¹Ç·Î ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº ºü¸£°Ô ½ÇÇàµÉ ¼öµµ ÀÖ´Ù.
5.1 ¹®ÀÚ¿ÀÇ Ç¥Çö
ÀÌ Àý¿¡¼´Â Ãʺ¸ C ÇÁ·Î±×·¡¸ÓµéÀ» À§ÇØ ¹®ÀÚ¿ÀÇ °³³äÀ» °£¸íÇÏ°Ô ¿ä¾àÇÏ¿´´Ù.C¿¡¼ ¹®ÀÚ¿ÀÌ ¾î¶»°Ô Ç¥ÇöµÇ¸ç ÈçÈ÷ ÀÖÀ» ¼ö ÀÖ´Â ÇÔÁ¤Àº ¹«¾ùÀΰ¡¸¦ ±â¼úÇØ ³õ¾Ò´Ù.¸¸¾à ´ç½ÅÀÌ ÀÌ¹Ì ÀÌ·¯ÇÑ ³»¿ëµéÀ» Àß ¾Ë°í ÀÖ´Ù¸é,ÀÌ ÀýÀ» °Ç³Ê ¶Ù¾îµµ ÁÁ´Ù.
¹®ÀÚ¿Àº char ´ë»ó¹°ÀÇ ¹è¿ÀÌ´Ù.±×·¯³ª ¹®ÀÚ¿ °ªÀ» °¡Áö´Â º¯¼öµéÀº Ç×»ó ¹®ÀÚÆ÷ÀÎÅÍ(char *) Çü Å·Π¼±¾ðµÈ´Ù.±×·¯ÇÑ Æ÷ÀÎÅÍ º¯¼öµéÀº ¾î¶² ¹®ÀÚ¿ÀÇ ³»¿ë¹°À» À§ÇÑ °ø°£À» Æ÷ÇÔÇϰí ÀÖÁö ¾Ê´Ù;±× ³»¿ë¹°Àº ¾î¶² ´Ù¸¥ °÷¿¡ ÀúÀåµÈ´Ù_Áï, ¾î¶² ¹è¿ º¯¼ö,¹®ÀÚ¿ »ó¼ö,¶Ç´Â µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸® (3 Àå.[¸Þ¸ð¸® ÇÒ´ç],21ÂÊ ÂüÁ¶)¿¡ ÀúÀåµÈ´Ù. ¼±ÅÃµÈ ¸Þ¸ð¸® °ø°£ÀÇ ÁÖ¼Ò¸¦ Æ÷ÀÎÅÍ º¯¼ö¿¡ ÀúÀåÇÏ´Â ÀÏ ´ç½ÅÀÇ ¸òÀÌ´Ù.¼±ÅÃÀûÀ¸·Î ´ç½ÅÀº Æ÷ÀÎÅÍ º¯¼ö¿¡ ³Î(null) Æ÷ÀÎÅ͸¦ ´ãÀ» ¼öµµ ÀÖ´Ù.ÀÌ ³ÎÆ÷ÀÎÅÍ´Â ¾î ¶°ÇÑ °÷µµ °¡¸®Å°Áö ¾Ê´Â °ÍÀ̹ǷΠ±×°ÍÀÌ °¡¸®Å°´Â ¹®ÀÚ¿À» ÂüÁ¶ÇÏ·Á°í ½ÃµµÇÑ´Ù¸é ¿¡·¯¸¦ ¸¸³¯ °ÍÀÌ´Ù.
°üÇàÀûÀ¸·Î ³Î¹®ÀÚ '\0'Àº ¹®ÀÚ¿ÀÇ ³¡À» °¡¸®Å²´Ù. ¿¹¸¦ µé¾î, charÇü Æ÷ÀÎÅÍ º¯¼ö p°¡ ¹®ÀÚ¿ÀÇ ³¡À» °¡¸®Å°´Â ³Î¹®ÀÚ¸¦ °¡¸®Å°´ÂÁö ¾Æ´ÑÁö¸¦ ¾Ë¾Æº¸°í ½ÍÀ¸¸é, !*p ¶Ç´Â *p == '\0'À̶ó°í ½áº¸¾Æ ¶ó.
³Î¹®ÀÚ´Â °³³ä»óÀ¸·Î ³ÎÆ÷ÀÎÅͿʹ ¾ÆÁÖ ´Ù¸£´Ù.¹°·Ð ±×°ÍµéÀÌ ¸ðµÎ Á¤¼ö 0À¸·Î Ç¥ÇöµÇ±â´Â ÇÏÁö¸¸.
C ÇÁ·Î±×·¥ ¼Ò½º¿¡¼ ¹®ÀÚ¿ ¸®ÅÍ·²Àº ÀÌÁß ÀοëºÎÈ£('"')»çÀÌ¿¡ ÀÖ´Â ¹®ÀÚµéÀÇ ¹®ÀÚ¿·Î¼ ³ªÅ¸³ ´Ù.ANSI C¿¡¼´Â ¹®ÀÚ¿ ¸®ÅÍ·²Àº ¹®ÀÚ¿ÀÇ ¿¬°á¿¡ ÀÇÇØ¼ ¸¸µé¾îÁú ¼öµµ ÀÖ´Ù."a" "b"´Â "ab"¿Í °° ´Ù.¹®ÀÚ¿ ¸®ÅÍ·²ÀÇ º¯°æÀº GNU C ÄÄÆÄÀÏ·¯¿¡¼´Â Çã¿ëµÇÁö ¾Ê´Â´Ù. ¿Ö³ÄÇϸé, ¸®ÅÍ·²Àº ÀбâÀü¿ë ÀÇ ÀúÀå¼Ò¿¡ À§Ä¡Çϱ⠶§¹®ÀÌ´Ù. <¿ªÀÚÁÖ¼®>¸®ÅÍ·²:C ¸í·É¹® »ó¿¡¼ Á÷Á¢ ÀÔ·ÂÇÏ´Â µ¥ÀÌÅÍ const·Î ¼±¾ðµÈ ¹®ÀÚ ¹è¿µé ¿ª½Ã º¯°æÀÌ ±ÝÁöµÈ´Ù. º¯°æ±ÝÁöÀÇ ¹®ÀÚ¿ Æ÷ÀÎÅ͸¦ const char * ÇüÅ·Π¼±¾ð ÇÏ´Â °ÍÀº ÀϹÝÀûÀ¸·Î ÈǸ¢ÇÑ ¹æ½ÄÀÌ´Ù. ÀÌ·¸°ÔÇϸé, C ÄÄÆÄÀÏ·¯´Â ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ±× ¹®ÀÚ¿À» °®°í¼ ¹«¾ùÀ» ÇϰíÀÚ ÇÏ´ÂÁö¿¡ °üÇÑ Á¤º¸¸¦ »ó´çÈ÷ ¾òÀ» ¼ö ÀÖÀ¸¸ç, ¶ÇÇÑ ±× ¹®ÀÚ¿ÀÇ ¿ì¿¬ÇÑ º¯ °æ¿¡ ´ëÇØ Á¶»çÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
¹®ÀÚ ¹è¿¿¡ ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ¾çÀº ¹®ÀÚ¿ÀÇ ³¡ºÎºÐÀÓÀ» Åë»óÀûÀ¸·Î Ç¥½ÃÇÏ´Â ³Î¹®ÀÚ¸¦ ³Ñ¾î¼ ´Â °÷±îÁö È®ÀåµÉ ¼öµµ ÀÖ´Ù.ÀÌ Ã¥¿¡¼´Â ÇÒ´çÅ©±â(allocation size)¶ó´Â ¿ë¾î´Â Ç×»ó ¹®ÀÚ¿¿¡ ÇÒ´ç µÈ ¸Þ¸ð¸®ÀÇ ÃÑ·®À» °¡¸®Å°°Ô µÉ °ÍÀ̰í,¹Ý¸é¿¡ ±æÀÌ(length)¶ó´Â ¿ë¾î´Â Á¾·á½ÃŰ´Â ³Î¹®ÀÚ±îÁöÀÇ (Æ÷ÇÔÇÏÁö´Â ¾ÊÀ½) ¹®ÀÚÀÇ °¹¼ö¸¦ °¡¸®Å°°Ô µÈ´Ù.
¾Ç¸í³ôÀº ÇÁ·Î±×·¥ ¼Ò½ºÀÇ ¹ö±×´Â ¹®ÀÚ¿¿¡¼ ±×°ÍÀÇ ÀûÇÕÇÑ Å©±âº¸´Ù ´õ¸¹Àº ¹®ÀÚ¸¦ Áý¾î³ÖÀ¸·Á °í ÇÏ´Â °ÍÀÌ´Ù. ¹®ÀÚ¿À» È®ÀåÇϰí ÀÌ¹Ì ÇÒ´çµÈ ¹è¿¿¡ ¹®ÀÚ¸¦ À̵¿½ÃŰ´Â ¼Ò½º¸¦ ¾µ ¶§,´ç½ÅÀº Ç× »ó ½ÅÁßÇÏ°Ô ÅØ½ºÆ®ÀÇ ±æÀ̸¦ ÃßÀûÇØ¾ß ÇÏ¸ç ¹è¿ÀÌ ³ÑÄ¡Áö ¾Ê´ÂÁö¸¦ ºÐ¸íÇÏ°Ô Ã¼Å©ÇÏ¿©¾ßÇÑ´Ù. ¸¹ Àº ¶óÀ̺귯¸® ÇÔ¼öµéÀÌ ¾Ë¾Æ¼ À̰ÍÀ» ÇØÁÖÁö´Â ¾Ê´Â´Ù! ±×¸®°í ´ç½ÅÀº ¹®ÀÚ¿ÀÇ ³¡À» ³ªÅ¸³»´Â ³Î ¹®ÀÚ¸¦ ´ã¾ÆµÑ ¿©ºÐÀÇ ÇÑ ¹ÙÀÌÆ®¸¦ ÇÒ´çÇØ¾ßÇÔÀ» ÀØÁö ¸»¾Æ¾ß ÇÑ´Ù.
5.2 ¹®ÀÚ¿°ú ¹è¿ ±ÔÁ¤
ÀÌ Àå¿¡¼´Â ÀÓÀÇÀÇ ¹è¿À̳ª ¸Þ¸ð¸® ºí·°¿¡¼ ÀÛµ¿µÇ´Â ÇÔ¼öµé°ú ³Î·Î Á¾·áµÇ´Â ¹®ÀÚÀÇ ¹è¿¿¡ ÇÑÁ¤µÇ¾î »ç¿ëµÇ´Â ÇÔ¼öµé¿¡ ´ëÇØ ¼³¸íÇÑ´Ù.ÀÓÀÇÀÇ ¹è¿À̳ª ¸Þ¸ð¸® ºí·°À» ó¸®ÇÏ´Â ÇÔ¼öµéÀº 'mem'(memcpyó·³)À¸·Î ½ÃÀ۵Ǵ ¸íĪÀ» °¡Áö¸ç Ç×»ó ó¸®ÇÒ ¸Þ¸ð¸® ºí·°ÀÇ Å©±â¸¦(¹ÙÀÌÆ®·Î) Áö Á¤ÇÏ´Â Àμö¸¦ °®´Â´Ù. ÀÌ ÇÔ¼öµéÀÇ ¹è¿ Àμö¿Í ±× ¹Ýȯ °ªÀº void * ÇüŸ¦ °¡Áö¸ç,Çü½Ä»ó ÀÌ·¯ÇÑ ¹è¿ÀÇ ¿ä¼ÒµéÀº "¹ÙÀÌÆ®"·Î¼ ÂüÁ¶µÈ´Ù.´ç½ÅÀº ÀÌ ÇÔ¼öµé¿¡°Ô ¾î¶² Á¾·ùÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇÒ ¼ö ÀÖ À¸¸ç, size ÀμöÀÇ °ªÀ» °è»êÇϴµ¥´Â sizeof ¿¬»êÀÚ°¡ À¯¿ëÇÏ´Ù.
´ëÁ¶ÀûÀ¸·Î,Ưº°È÷ ¹®ÀÚ¿À» ó¸®ÇÏ´Â ÇÔ¼öµéÀº 'str'·Î ½ÃÀÛÇÏ´Â(strcpy¿Í °°ÀÌ) ¸íĪÀ» °¡Áö¸ç,ºÐ ¸íÇÑ Å©±âÀÇ Àμö¸¦ Àü´Þ¹Þ±â¸¦ ¿ä±¸ÇÏ´Â ´ë½Å¿¡ ¹®ÀÚ¿À» Á¾·á½ÃŰ´Â ³Î¹®ÀÚ¸¦ ¿ä±¸ÇÑ´Ù.(ÀÌ·¯ÇÑ ÇÔ¼öµé Áß¿¡ ¾î¶² °ÍµéÀº ƯÁ¤ÇÑ ÃÖ´ë ±æÀ̸¦ ¹Þ¾ÆµéÀÌÁö¸¸,¿ª½Ã ³Î¹®ÀÚ¸¦ ½á¼ »çÀü Á¾·á¸¦ üũÇÏ °í ÀÖ´Ù.) ÀÌ·¯ÇÑ ÇÔ¼öµéÀÇ ¹è¿ Àμö¿Í ¹Ýȯ °ªÀº char * ÇüŸ¦ °¡Áö¸ç,¹è¿ ¿ä¼ÒµéÀº "¹®ÀÚµé"·Î ¼ ÂüÁ¶µÈ´Ù.
¸¹Àº °æ¿ì¿¡ ÇÑ ÇÔ¼ö¿¡´Â 'mem' ¹öÁ¯°ú 'str' ¹öÁ¯ÀÌ ¸ðµÎ °®ÃçÁ® ÀÖ´Ù.±×ÁßÀÇ ÇÑÆíÀÇ ÇÔ¼ö´Â ÈξÀ ´õ ÀûÇÕÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª Á¤È®ÇÑ »óȲÀ» ¿ä±¸ÇÑ´Ù. ¸¸¾à ´ç½ÅÀÇ ÇÁ·Î±×·¥ÀÌ ÀÓÀÇÀÇ ¹è¿À̳ª ÀúÀå¼ÒÀÇ ºí·°À» ó¸®ÇÏ·Á ÇÑ´Ù¸é, ´ç½ÅÀº 'mem'ÇÔ¼öµéÀ» ¾²´Â ÆíÀÌ ÁÁ´Ù. ¹Ý¸é¿¡, ´ç½ÅÀÌ »çÀü¿¡ ¹®ÀÚ¿ÀÇ ±æÀ̸¦ ¾ËÁö ¸øÇÑ »óÅ¿¡¼ ³Î·Î ³¡³ª´Â ¹®ÀÚ¿À» ó¸®ÇÒ ¶§´Â str'ÇÔ¼öµéÀ» »ç¿ëÇÏ´Â Æí ÀÌ Æí¸®ÇÏ´Ù.
5.3 ¹®ÀÚ¿ ±æÀÌ
´ç½ÅÀº strlen ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ¿ÀÇ ±æÀ̸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â 'string.h'¿¡ ¼±¾ðµÇ¾î ÀÖ ´Ù.
ÇÔ¼ö size_t strlen (const char *s)
ÇÔ¼ö strlenÀº ³Î·Î Á¾·áµÇ´Â ¹®ÀÚ¿ sÀÇ ±æÀ̸¦ ¹ÝȯÇÑ´Ù.(´Ù¸¥ ¸»·Î Ç¥ÇöÇϸé,±×°ÍÀº ¹è¿³»ÀÇ Á¾·á ÇÏ´Â ³Î¹®ÀÚÀÇ ¿ÀÇÁ¼ÂÀ» ¹ÝȯÇÑ´Ù.)
¿¹¸¦ µé¸é,
strlen ("hello, world")
ÇÑ ¹®ÀÚÀÇ ¹è¿¿¡ Àû¿ëÇØº¸¸é, strlen ÇÔ¼ö´Â ±×°÷¿¡ ÀúÀåµÈ ¹®ÀÚ¿ÀÇ ±æÀ̸¦ ¹ÝȯÇÏ´Â °ÍÀÌÁö,±×°Í ÀÇ ÇÒ´ç Å©±â¸¦ ¹ÝȯÇÏ´Â °Ô ¾Æ´Ï´Ù. ¹®ÀÚÀÇ ÇÒ´ç Å©±â´Â sizeof ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ±¸ÇÒ ¼ö ÀÖ´Ù.
char string[32] = "hello, world";
/*À§ÀÇ ¹è¿¿¡´Â 31°³ÀÇ ¹®ÀÚ¿Í Á¾·á ³Î¹®ÀÚ 1°³ ¸¦ ´ãÀ» ¼ö ÀÖ´Ù*/
sizeof (string)
) 32
/*ÇÒ´çµÈ ¹è¿ÀÇ Å©±â´Â 32*/
strlen (string)
) 12
/*½ÇÁ¦ÀÇ ¹®ÀÚ¿ÀÇ ±æÀÌ´Â 12*/
5.4 (¹®ÀÚ¿)º¹»ç¿Í °áÇÕ
ÀÌ Àý¿¡¼ ¼¼úÇØ ³õÀº ÇÔ¼öµéÀº ¹®ÀÚ¿°ú ¹è¿À» º¹»çÇϰųª ÇÑ ¹®ÀÚ¿À» ´Ù¸¥ ¹®ÀÚ¿¿¡ °áÇÕÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù.ÀÌ ÇÔ¼öµéÀº 'string.h'¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù.
ÀÌ ÇÔ¼öµéÀÇ Àμö ±âÀÔ ¼ø¼¸¦ ¿Ü¿ì´Â ¹æ¹ýÀº ¼Ò½º ¹è¿ÀÇ ¿ÞÆí¿¡ ¸ñÀû ¹è¿À» µÎ¾î¼ ÇÒ´ç Ç¥Çö °ú ÀÏÄ¡½ÃŰ´Â °ÍÀÌ´Ù.ÀÌ·¯ÇÑ ÇÔ¼öµé ÀüºÎ°¡ ¸ñÀû ¹è¿ÀÇ ÁÖ¼Ò¸¦ ¹ÝȯÇÑ´Ù.
ÀÌ ÇÔ¼öµéÀÇ ´ëºÎºÐÀº ¼Ò½º ¹è¿°ú ¸ñÀû ¹è¿ÀÌ ÁßøµÉ °æ¿ì¿¡ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù.¿¹¸¦µé¸é,¸ñ Àû ¹è¿ÀÇ ½ÃÀÛ ºÎºÐÀÌ ¼Ò½º ¹è¿ÀÇ ³¡ºÎºÐ°ú ÁßøµÇ°Ô µÇ¸é, ¼Ò½º ¹è¿ ÁßÀÇ ±× ºÎºÐÀÇ ³»¿ëÀÌ º¹ »çµÇ±â Àü¿¡ µ¤È÷°Ô µÈ´Ù. ´õ¿í ½É°¢ÇÑ °ÍÀº, ¹®ÀÚ¿ ÇÔ¼öÀÇ °æ¿ì¿¡, ¹®ÀÚ¿ÀÇ ³¡À» ³ªÅ¸³»´Â ³Î¹®ÀÚ °¡ »ó½ÇµÇ°í, ±× º¹»ç ÇÔ¼ö´Â ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡ ÇÒ´çµÈ ¸ðµç ¸Þ¸ð¸®¸¦ µ¹¾Æ´Ù´Ï´Â ·çÇÁ¿¡ ºüÁ®¹ö¸± °ÍÀÌ´Ù.
ÁßøµÈ ¹è¿»çÀÌ¿¡¼ º¹»çÇÏ´Â ¹®Á¦¸¦ °®´Â ¸ðµç ÇÔ¼öµéÀÌ ÀÌ ¾È³»¼¿¡¼ ºÐ¸íÇÏ°Ô ÁöÀûµÇ¾îÀÖ´Ù. ÀÌ ÀýÀÇ ÇÔ¼öµé »Ó¸¸¾Æ´Ï¶ó sprintf(7.9.7 [Çü½ÄÈµÈ Ãâ·Â ÇÔ¼ö], 76ÂÊ ÂüÁ¶.)³ª scanf(7.11.8 [Çü½ÄÈµÈ ÀÔ·Â ÇÔ¼ö], 90ÂÊÂüÁ¶.)¿Í °°Àº ¸î¸î ÇÔ¼öµéÀÌ ÀÖ´Ù.
ÇÔ¼ö void * memcpy (void *to, const void *from, size_t size)
memcpy ÇÔ¼ö´Â from¿¡¼ ½ÃÀ۵Ǵ ´ë»ó¹°·ÎºÎÅÍ to·Î ½ÃÀ۵Ǵ ´ë»ó¹°·Î size ¹ÙÀÌÆ®¸¦ º¹»çÇÑ´Ù. ¸¸¾à 2°³ÀÇ ¹è¿ from°ú to°¡ ÁßøµÉ °æ¿ìÀÇ ÇàÀ§´Â Á¤ÀǵǾîÀÖÁö ¾Ê´Ù; ÁßøµÉ °æ¿ì¿¡´Â ÀÌ ÇÔ¼ö ´ë½Å¿¡ memmove¸¦ »ç¿ëÇ϶ó. memcpy°¡ ¹ÝȯÇÏ´Â °ªÀº toÀÇ °ªÀÌ´Ù.
¾î¶² ¹è¿ÀÇ ³»¿ë¹°À» º¹»çÇϱâ À§ÇØ memcpy ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¿¹¸¦ µé¾îº¸ÀÚ:
struct foo *oldarray, *newarray;
/*foo¶ó´Â ¸íĪÀÇ ½ºÆ®·°Ãİ¡ 2°³ÀÇ Æ÷ÀÎÅÍ¿¡ ÇÒ´çµÇ°í*/
int arraysize;
. . .
memcpy (new, old, arraysize * sizeof(struct foo));
/* oldÀÇ ³»¿ëÀ» new¿¡ <½ºÆ®·°ÃÄ Å©±â * ƯÁ¤¼ýÀÚ>Å©±â ¸¸Å º¹»çÇ϶ó´Â °Í*/
ÇÔ¼ö void * memmove(void *to, const void *from, size_t size)
memmove´Â 2°³ÀÇ ºí·° °ø°£ÀÌ ÁßøµÉ °æ¿ì¿¡Á¶Â÷µµ from¿¡¼ size ¹ÙÀÌÆ®¸¦ toÀÇ size ¹ÙÀÌÆ®¿¡ º¹»çÇÑ´Ù.ÁßøÀÌ ÀÖÀ» ¶§, memmove´Â ÁÖÀDZí°Ô fromºí·°¿¡ ÀÖ´Â ¹ÙÀÌÆ®¿¡¼ ÃÖÃÊÀÇ °ªÀ» º¹»çÇÏ´Â µ¥,°Å±â¿¡´Â toºí·°¿¡ ¼ÓÇÏ´Â ¹ÙÀÌÆ®µµ Æ÷ÇԵǾî Àֱ⠶§¹®ÀÌ´Ù.
ÇÔ¼ö void * memccpy(void *to, const void *from, int c, size_t size) Function
ÀÌ ÇÔ¼ö´Â from¿¡¼ to·Î Á¤È®È÷ size ¹ÙÀÌÆ® ¸¸Å¸¸ º¹»çÇϰí,c¿¡ ÀÏÄ¡ÇÏ´Â ÇÑ ¹ÙÀÌÆ®°¡ ¹ß°ßµÇ¸é ÁßÁöÇÑ´Ù. ¹Ýȯ °ªÀº c°¡ º¹»çµÈ °÷ ¹Ù·Î ´ÙÀ½ÀÇ ¹ÙÀÌÆ®¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀ̸ç, ¸¸ÀÏ fromÀÇ ÃÖÃÊÀÇ size ¹ÙÀÌÆ®¿¡ c¿¡ ÀÏÄ¡ÇÏ´Â ¹ÙÀÌÆ®°¡ ¾øÀ¸¸é ³ÎÆ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.
ÇÔ¼ö void * memset (void *block, int c, size_t size)
ÀÌ ÇÔ¼ö´Â cÀÇ °ªÀ»(unsigned char·Î º¯È¯ÇÏ¿©) block ¿¡¼ ½ÃÀ۵Ǵ ´ë»ó¹°ÀÇ ÃÖÃÊÀÇ size ¹ÙÀÌÆ®ÀÇ °¢ ºÎºÐ¿¡ º¹»çÇÑ´Ù.ÀÌ ÇÔ¼ö´Â ºí·°ÀÇ °ªÀ» ¹ÝȯÇÑ´Ù.
ÇÔ¼ö char * strcpy (char *to, const char *from)
ÀÌ ÇÔ¼ö´Â ¹®ÀÚ¿ from(Á¾·áÇÏ´Â ³Î¹®ÀÚ±îÁö Æ÷ÇÔÇÏ¿©)À¸·ÎºÎÅÍ ¹®ÀÚ¿ to·Î ¹®ÀÚµéÀ» º¹»çÇÑ ´Ù.memcpyó·³ ¹®ÀÚ¿ÀÌ ÁßøµÇ°Ô µÇ¸é ÀÌ ÇÔ¼öµµ ¾Ë ¼ö ¾ø´Â °á°ú¸¦ ÃÊ·¡ÇÑ´Ù.¹Ýȯ°ªÀº toÀÇ °ª ÀÌ´Ù.
ÇÔ¼ö char * strncpy (char *to, const char *from, size_t size)
ÀÌ ÇÔ¼ö´Â strcpy¿Í ºñ½ÁÇÏÁö¸¸ Ç×»ó Á¤È®È÷ size ¹ÙÀÌÆ® ¸¸Å¸¸ to¿¡ º¹»çÇÑ´Ù.¸¸¾à fromÀÇ ±æÀ̰¡ sizeº¸´Ù Å©¸é, ÀÌ ÇÔ¼ö´Â ¾ÕºÎºÐÀÇ size ¹ÙÀÌÆ®¸¦ º¹»çÇÑ´Ù. ¸¸¾à fromÀÇ ±æÀ̰¡ sizeº¸´Ù ÀÛÀ¸¸é,ÀÌ ÇÔ¼ö´Â fromÀÇ ¸ðµç °ÍÀ» º¹»çÇÏ°í ±× Å©±â¸¸ÅÀÇ °ø¹éÀ» ³Î¹®ÀڷΠä¿î´Ù. ÀÌ¿Í °°Àº ÇàÀ§´Â º°·Î À¯¿ëÇÏÁö ¾ÊÁö¸¸ ANSI C Ç¥ÁØ¿¡ ÀÇÇØ ±ÔÁ¤µÈ »çÇ×ÀÌ´Ù.
¹®ÀÚ¿ÀÌ ÁßøµÉ °æ¿ìÀÇ strncpyÀÇ ÇàÀ§´Â Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù.strcpy¿Í´Â ´Ù¸£°Ô strncpy¸¦ »ç¿ëÇÏ ´Â °ÍÀÌ toÀÇ ÇÒ´çµÈ °ø°£ÀÇ ³¡ºÎºÐ ÀÌÈÄ¿¡ ³Î¹®ÀÚ¸¦ ä¿òÀ¸·Î½á ¹ö±×¸¦ ÇÇÇÏ´Â ¼ö´ÜÀÌ µÈ´Ù.±×·¯³ª, ¾î¶² °æ¿ì¿¡´Â ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» ´À¸®°Ô Çϱ⵵ ÇÑ´Ù: Å« ¹öÆÛ¿¡ ÀÛÀº ¹®ÀÚ¿À» º¹»çÇÏ´Â °æ¿ìÀÌ ´Ù. ÀÌ·± °æ¿ì¿¡´Â, size°¡ ³Ê¹« Ä¿¼ strncpy°¡ ³Î¹®ÀÚ¸¦ ä¿ì´Â ½Ã°£ÀÌ »ó´çÈ÷ ³¶ºñµÇ´Â °ÍÀÌ´Ù.
ÇÔ¼ö char * strdup (const char *s)
ÀÌ ÇÔ¼ö´Â ³Î·Î Á¾·áµÇ´Â ¹®ÀÚ¿ s¸¦ »õ·Ó°Ô ÇÒ´çµÇ´Â ¹®ÀÚ¿·Î º¹»çÇÑ´Ù.¹®ÀÚ¿Àº mallocÀ» ½á¼ ÇÒ´çµÈ´Ù: 3.3 [Á¦ÇѾø´Â ÇÒ´ç],22ÂÊ ÂüÁ¶.
¸¸¾à mallocÀÌ »õ·Î¿î ¹®ÀÚ¿À» À§ÇÑ °ø°£À» ÇÒ´çÇÒ ¼ö ¾ø°ÔµÇ¸é,strdup´Â ³Î Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.±× ·¸Áö ¾ÊÀ¸¸é ÀÌ ÇÔ¼ö´Â »õ·Î¿î ¹®ÀÚ¿¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÑ´Ù.
ÇÔ¼ö char * stpcpy (char *to, const char *from)
ÀÌ ÇÔ¼ö´Â strcpy¿Í °°À¸³ª ÇѰ¡Áö°¡ ´Ù¸£´Ù. ÀÌ ÇÔ¼ö´Â ½ÃÀۺκÐÀÇ Æ÷ÀÎÅͰ¡ ¾Æ´Ï¶ó ¹®ÀÚ¿ toÀÇ ³¡ ºÎºÐ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ(Áï, Á¾·áÇÏ´Â ³Î¹®ÀÚÀÇ ÁÖ¼Ò)¸¦ ¹ÝȯÇÑ´Ù.
¿¹¸¦ µé¸é,´ÙÀ½ ÇÁ·Î±×·¥Àº stpcpy ÇÔ¼ö¸¦ »ç¿ëÇØ¼ 'foobar'¸¦ ¸¸µé±â À§ÇÏ¿© 'foo'¿Í 'bar'¸¦ °áÇÕ ÇÏ¿´°í, ±×·± ´ÙÀ½¿¡ ±×°ÍÀ» Ãâ·ÂÇØ º¸¾Ò´Ù.
#include <string.h>
#include <stdio.h>
int main (void)
{
char buffer[10];
char *to = buffer;
/*¹öÆÛÀÇ °ªÀ» to¿¡ ³Ö°í?*/
to = stpcpy (to, "foo");
/*¹®ÀÚ¿ "foo"¸¦ to¿¡ º¹»ç*/
to = stpcpy (to, "bar");
/*¹®ÀÚ¿ "bar"¸¦ "foo"°¡ ´ã±ä to¿¡ º¹»ç*/
puts (buffer);
/*¹öÆÛÀÇ ¹®ÀÚ¿À» ²¨³»º¸¸é, "foobar"°¡ µÇ¾ú°ÚÁö?*/
return 0;
}
ÀÌ ÇÔ¼ö´Â ANSI³ª POSIX Ç¥ÁØÀÇ ÀϺκÐÀÌ ¾Æ´Ï¸ç, À¯´Ð½º üÁ¦¿¡¼ ÀÏ»óÀûÀÎ °Íµµ ¾Æ´ÏÁö¸¸,¿ì¸® °¡ À̰ÍÀ» ¸¸µé¾î ³½ °Íµµ ¾Æ´Ï´Ù. ¾Æ¸¶µµ À̰ÍÀº MS-DOS(?)¿¡¼ ¸¸µé¾îÁø °Í °°´Ù. ¹®ÀÚ¿ÀÌ Áß Ã¸µÉ °æ¿ìÀÇ ÇàÀ§µµ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù.
ÇÔ¼ö char * strcat (char *to, const char *from)
strcat ÇÔ¼ö´Â strcpy¿Í À¯»çÇÏÁö¸¸ µ¤¾î¾²´Â ´ë½Å¿¡ fromÀÇ ¹®ÀÚµéÀ» toÀÇ ³¡¿¡ °áÇÕÇϰųª Ãß°¡ÇÏ ´Â Á¡¸¸ ´Ù¸£´Ù. Áï,fromÀÇ Ã³À½ ¹®ÀÚ°¡ toÀÇ ³¡ºÎºÐÀ» ³ªÅ¸³»´Â ³Î¹®ÀÚ¸¦ µ¤¾î¾²°Ô µÈ´Ù.
strcat¿Í °°Àº Á¤ÀÇ´Â ¾Æ¸¶ ÀÌ·¸°Ô µÉ °ÍÀÌ´Ù:
char * strcat (char *to, const char *from)
{
strcpy (to + strlen (to), from);
/*strcpy(to,from);Àº fromÀÌ toÀÇ ±âÁ¸³»¿ëÀ» µ¤¾î¾²Áö¸¸,À§ÀÇ °ÍÀº toÀÇ ±âÁ¸ÁÖ¼Ò¿¡´Ù toÀÇ ¹®ÀÚ¿ ±æÀÌ ¸¸ÅÀ» ´õÇÑ ÁÖ¼Ò¿¡ fromÀ» º¹»çÇϹǷÎ,toÀÇ ³Î¹®ÀÚ¸¦ Á¦¿ÜÇÑ ±âÁ¸ ¹®ÀÚ¿ÀÌ ±×´ë·Î »ì¾Æ³²´Â ´Ù´Â ¶æ?*/
return to;
/*ÁÖ¼Ò°¡ ¹ÝȯµÇ³²?*/
}
ÀÌ ÇÔ¼ö¿¡µµ ¹®ÀÚ¿ÀÌ ÁßøµÉ °æ¿ì°¡ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù.
ÇÔ¼ö char * strncat (char *to, const char *from, size_t size)
ÀÌ ÇÔ¼ö´Â strcat¿Í °°À¸³ª,fromÀÇ size ¹®ÀÚ¸¸Å¸¸ toÀÇ ³¡ºÎºÐ¿¡ Ãß°¡µÈ´Ù´Â Á¡¿¡¼ ´Ù¸£´Ù.ÀÌ ÇÔ¼ö ¿ª½Ã ÇϳªÀÇ ³Î ¹®ÀÚ¸¦ toÀÇ ³¡¿¡ Ãß°¡Çϸç, ±×¸®ÇÏ¿© toÀÇ ÇÒ´çµÈ Àüü Å©±â´Â ±×°ÍÀÇ ÃÖÃÊÀÇ ±æÀÌ º¸´Ù Àû¾îµµ size+1 ÀÌ»óÀÌ µÇ¾î¾ß ÇÑ´Ù.
strncpy ÇÔ¼ö´Â ¾Æ·¡¿Í °°ÀÌ ¸¸µé¾îÁ³À» °ÍÀÌ´Ù.
char * strncat(char *to, const char *from, size_t size)
{
strncpy (to + strlen (to), from, size);
return to;
}
ÀÌ ÇÔ¼ö ¿ª½Ã ¹®ÀÚ¿ ÁßøÀÇ °æ¿ì¸¦ Á¤ÀÇÇÏÁö ¾Ê°í ÀÖ´Ù. ´ÙÀ½¿¡ strncpy¿Í strncatÀÇ ¿¹¸¦ º¸ÀÚ. strncat ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ¹®ÀÚ ¹è¿ ¹öÆÛ°¡ ÁßøµÇ´Â °ÍÀ» ÇÇÇϱâ À§Çؼ size ÆÄ¶ó¸ÞÅͰ¡ °è»êµÇ´Â ¹æ½Ä¿¡ ÁÖÀÇÇ϶ó.
#include <string.h>
#include <stdio.h>
#define SIZE 10
static char buffer[SIZE];
/*À½..Á¤Àû º¯¼ö´Â ±× °ªÀÌ ºÒº¯À¸·Î ÀúÀå?*/
main ()
{
/*¹öÆÛ¿¡ "hello"¸¦ 10 ¹ÙÀÌÆ®¸¸ º¹»ç*/
strncpy (buffer, "hello", SIZE);
/*±×·¯¸é buffer°¡ h e l l o \0 \0 \0 \0 \0 ÀÌ·¸°Ô µÇ´Â °Í?*/
puts (buffer);
strncat (buffer, ", world", SIZE - strlen(buffer) - 1);
/*À½..10-5-1,Áï,4¸¸Å¸¸ ", world"¸¦ Ãß°¡ÇÏ¸é °á±¹, ", wo"¸¸ °áÇյǴ±º*/
puts (buffer);
}
ÀÌ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀº ¾Æ·¡¿Í °°´Ù.
hello
hello, wo
ÇÔ¼ö void * bcopy (void *from, const void *to, size_t size)
ÀÌ ÇÔ¼ö´Â BSD¿¡¼ À¯·¡µÈ °ÍÀ¸·Î¼ memmove¿Í ´ëüÇÒ ¼ö ÀÖ¾î ¾µ¸ð¾ø°Ô µÈ ÇÔ¼ö´Ù.´Ù¸¸ Àμö¸¦ ¹èÄ¡ÇÏ´Â ¼ø¼°¡ ´Ù¸¥ Á¡ÀÌ ÀÖ¾î¼ memmove¿Í ¿ÏÀüÈ÷ °°À» ¼ö ¾øÀ½¿¡ À¯ÀÇÇ϶ó.
ÇÔ¼ö void * bzero (void *block, size_t size)
ÀÌ ÇÔ¼ö´Â BSD¿¡¼ À¯·¡µÈ °ÍÀ¸·Î¼ memset¿Í ´ëüÇÒ ¼ö ÀÖ¾î ¾µ¸ð¾ø°Ô µÈ ÇÔ¼öÀ̸ç, ÀÌ ÇÔ¼ö°¡ ÀúÀåÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ °ªÀº ¿µ(0)ÀÌ´Ù.¾î¶² ÀåÄ¡µéÀº Á¦·ÎÈµÈ ¸Þ¸ð¸®¸¦ À§ÇÑ Æ¯º°ÇÑ µµ±¸µéÀ» °® Ãß°í ÀÖ´Â °æ¿ì°¡ Àִµ¥, À̶§´Â bzero°¡ memsetº¸´Ù ÈξÀ È¿°úÀûÀÌ´Ù.
5.5 ¹®ÀÚ¿/¹è¿ ºñ±³
´ç½ÅÀº ¹®ÀÚ¿°ú ¹è¿ÀÇ ³»¿ëÀ» ºñ±³Çϱâ À§Çؼ ÀÌ Àý¿¡ ÀÖ´Â ÇÔ¼öµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ºñ±³ »Ó¸¸ ¾Æ´Ï¶ó Á¤·ÄÀ» ÇÒ ¶§ ¼ø¼°ü°è¸¦ °áÁ¤ÇÏ´Â ÇÔ¼ö·Î¼µµ »ç¿ëÇÒ¼ö ÀÖ´Ù. 15Àå [Searching and Sorting] 217ÆäÀÌÁö ÂüÁ¶.
´Ù¸¥ ´ëºÎºÐÀÇ ºñ±³¿Í ´Þ¸® C¿¡¼, ¹®ÀÚ¿ ºñ±³ ÇÔ¼ö´Â ±× ºñ±³ÀÇ °á°ú°¡ µ¿µîÇÏÁö ¾ÊÀ» °æ¿ì 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù. ±× °ªÀÇ Àǹ̴ ºñ±³ÇÑ ¹®ÀÚ¿¿¡¼ µ¿µîÇÏÁö ¾ÊÀº ù ¹øÂ° ¹®ÀÚÀÇ ¼ø¼°ü°è¸¦ °¡¸®Å²´Ù. Áï À½¼ö°ªÀº ù ¹øÂ° ¹®ÀÚ¿ÀÌ µÎ ¹øÂ° ¹®ÀÚ¿º¸´Ù ÀÛ´Ù´Â°É ÀǹÌÇÏ°í ±× °ªÀÌ ¾ç¼öÀ̸é ù ¹øÂ° ¹®ÀÚ¿ÀÌ µÎ ¹øÂ° ¹®ÀÚ¿º¸´Ù Å©´Ù´Â°É ÀǹÌÇÑ´Ù.
¸¸¾à ´ç½ÅÀÌ ´Ü¼øÇÏ°Ô µ¿µîÇÑÁö ¾Æ´ÑÁö ¸¸À» üũÇϱâ À§ÇØ ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÑ´Ù¸é ´ç½ÅÀº ¹Ø¿¡ ÀÖ´Â °Í ó·³ ¸¶Å©·Î Á¤ÀǸ¦ ÀÌ¿ëÇÏ¿© Á»´õ ±ú²ýÇÑ ÇÁ·Î±×·¥À» ¸¸µé¼öµµ ÀÖ´Ù.
#define str_eq(s1,s2) (!strcmp ((s1),(s2)))
ÀÌ ÇÔ¼öµéÀº Çì´õÆÄÀÏ 'string.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
ÇÔ¼ö: int memcmp (const void *al, const void *a2, size_t size)
ÀÌ ÇÔ¼ö´Â ¸Þ¸ð¸®ÀÇ a1À¸·Î ½ÃÀÛÇÏ´Â size¸¸ÅÀ» a2·Î ½ÃÀÛÇÏ´Â °°Àº size¸¸Å°ú ºñ±³ÇÏ´Â ÇÔ¼öÀÌ´Ù. ¹ÙÀÌÆ®( unsigned char objects·Î ÇØ¼®µÇ°í, int·Î ½Â°ÝµÈ)ÀÇ Ã¹ ¹øÂ° ´Ù¸¥ ½ÖÀÌ ³ªÅ¸³ª¸é ´Ù¸§À» ³ª Ÿ³»´Â ½ÅÈ£¸¦ ¸®ÅÏÇÑ´Ù. ¸¸¾à µÎ ºí·ÏÀÇ ³»¿ëÀÌ µ¿µîÇϸé memcmp´Â 0À» ¸®ÅÏÇÑ´Ù.
Á¤ÇØÁöÁö ¾ÊÀº ¹è¿¿¡¼ memcmpÇÔ¼ö´Â µ¿µîÇÔÀ» ºñ±³Çϴµ¥ ´ë°³´Â À¯¿ëÇÏ°Ô ¾²ÀδÙ. ±×·¸Áö¸¸ ¾î ¶² ¹è¿¿¡¼ ÇѹÙÀÌÆ®º°·Î Å©±â ºñ±³¸¦ ÇÒ ¶§´Â À¯¿ëÇÏÁö ¾Ê´Ù. ¿¹¸¦ µé¾î, ÇÃ·ÎÆÃ Æ÷ÀÎÆ®°¡ ÀÖ´Â ¿©·¯¹ÙÀÌÆ®¿¡¼ ÇѹÙÀÌÆ® ºñ±³´Â ½Ç¼öµé°ª »çÀÌÀÇ °ü°è¿¡ ´ëÇØ¼ ¾Æ¹«°Íµµ ¸»ÇØÁÖÁö ¾Ê´Â °ÍÀÌ´Ù.
´ç½ÅÀÌ "holes(±¸¸Û)".. Áï.. unionsÀÇ ³¡¿¡ µ¡ºÙ¿©Áø °ø¹é, ¹®ÀÚ¿ÀÇ ³¡¿¡ µ¡ºÙ¿©Áø ¹®ÀÚµéó·³ ±× µéÀÌ ½ÇÁ¦·Î ÀúÀåµÈ °ø°£º¸´Ù Àüü ±æÀ̸¦ ´õ Â÷ÁöÇÏ°Ô µÇ°í, °Á¦·Î Çʿ信(alignment) ÀÇÇØ ¿ä±¸µÈ ¾î¶² objectµé¿¡ µ¡ºÙ¿©Áø °Í°ú °°Àº "holes"¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Â objects¸¦ ºñ±³Çϱâ À§ÇØ memcmp¸¦ »ç¿ëÇÏ´Â °ÍÀº ÁÖÀǰ¡ ÇÊ¿äÇÏ´Ù. À̵é "±¸¸Ûµé"Àº ¹ÙÀÌÆ®º° ºñ±³¸¦ ¼öÇàÇÒ ¶§ ¾Ö¸ÅÇϰí ÀÌ»óÇÑ ÀÛµ¿ ÀÇ ¿øÀÎÀÌ µÉ ¼ö ÀÖ°í ´õ ³ª¾Æ°¡¼´Â Ãæµ¹ ¼ººÐº° ºñ±³¸¦ ¼öÇàÇÏ´Â °Í°ú °°Àº °á°ú¸¦ ³½´Ù.
¿¹¸¦ µé¾î ¹ØÀÇ ±¸Á¶Ã¼ Çü Á¤ÀÇó·³;
struct foo{
unsigned char tag;
union
{
double f;
long i;
char *p;
} value;
};
´ç½ÅÀº ±¸Á¶Ã¼ foo ¿Í °°Àº objectµé¿¡ ºñ±³ÇÔ¼ö¸¦ ¾µ ¶§´Â memcmp´ë½Å¿¡ Ưº°ÈµÈ ºñ±³ÇÔ¼ö¸¦ »ç ¿ëÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù.
ÇÔ¼ö: int strcmp (const char *s1, const char *s2)
strcmpÇÔ¼ö´Â ¹®ÀÚ¿ s1°ú s2¸¦ ºñ±³Çؼ ù ¹øÀç ´Ù¸¥ ¹®ÀÚÀÇ ( unsigned char·Î object¸¦ ÇØ¼®ÇÏ °í int·Î ½Â°ÝµÈ ) ½ÖÀÌ ³ª¿À¸é ±× ´ÙÀ½¿¡ ÇØ´çÇÏ´Â °ªÀ» ¸®ÅÏÇÑ´Ù. ¸¸¾à µÎ °³ÀÇ ¹®ÀÚ¿ÀÌ °°À¸¸é strcmp´Â 0À» ¸®ÅÏÇÑ´Ù.
strcmp¸¦ »ç¿ëÇßÀ» ¶§ ¸¸¾à s1ÀÌ s2¿Í ¾ÕÂÊÀÇ ¹®ÀÚ¿ÀÌ °°Àº substring(ºÎ¹®ÀÚ¿)À̶ó¸é s1ÀÌ s2º¸ ´Ù ÀÛ´Ù°í °£ÁÖÇÑ´Ù.
ÇÔ¼ö: int strcasecmp (const char *s1, const char *s2)
ÀÌ ÇÔ¼ö´Â ¹«½ÃµÇ´Â °æ¿ìÀÇ Â÷À̸¦ Á¦¿ÜÇϸé strcmp¿Í °°´Ù.
ÇÔ¼ö: int strncasecmp (const char *s1, const char *s2)
ÀÌ ÇÔ¼ö´Â ¹«½ÃµÇ´Â °æ¿ìÀÇ Â÷À̸¦ Á¦¿ÜÇϰí´Â strncmp¿Í °°´Ù. strncasecamp´Â GNUÈ®ÀåÀÌ´Ù.
ÇÔ¼ö: int strncmp (const char *s1, cnost char *s2, size_t size)
ÀÌ ÇÔ¼ö´Â ºñ±³µÉ ¹®ÀÚµéÀÇ ±æÀ̰¡ Àμö·Î ÇÊ¿äÇÑ°É Á¦¿ÜÇϸé strcmp¿Í ºñ½ÁÇÏ´Ù. ´Ù¸¥¸»·Î ÇÏ¸é ¸¸ÀÏ µÎ °³ÀÇ ¹®ÀÚ¿ÀÌ ÁÖ¾îÁø Å©±â¾È¿¡¼ ±×¾È¿¡ ÀÖ´Â ¹®ÀÚµéÀÌ °°´Ù¸é ¸®ÅϰªÀº zero(0)ÀÌ´Ù.
¿©±â¿¡ strcmp¿Í strncmpÀÇ »ç¿ëÀ» º¸¿©ÁÖ´Â ¸î°¡Áö ¿¹°¡ ÀÖ´Ù. ÀÌ ¿¹µéÀº ASCII ¹®ÀÚ¼ÂÀ» »ç¿ëÇÑ ´Ù°í °¡Á¤ÇÏÀÚ. ( ¸¸¾à ASCII ´ë½Å¿¡ EBCDIC°ú °°Àº ´Ù¸¥¹®ÀÚ¼ÂÀ» »ç¿ëÇϸé glyphs(¹®ÀÚ)¸¦ ´Ù¸¥ ¼ýÀÚ ÄÚµåµé·Î ¿¬°ü½ÃÄѼ °á°ú°ªÀ̳ª ¼ø¼°ü°è°¡ ¿ì¸®ÀÇ ¿¹»ó°ú ´Ù¸¦¼ö ÀÖ´Ù.
strcmp ("hello", "hello")
) 0
/* ÀÌ µÎ °³ÀÇ ¹®ÀÚ¿Àº °°´Ù. */
strcmp ("hello", "Hello")
) 32
/* ºñ±³´Â case-sensitive ÇÏ´Ù.( Áï ´ë, ¼Ò¹®ÀÚ ±¸º°À» ÇÑ´Ù..) */
strcmp ("hello", "world")
) -15
/* ¹®ÀÚ 'h'´Â ¹®ÀÚ 'w'º¸´Ù ¾Õ¿¡ Á¸ÀçÇÑ´Ù. Áï h°¡ wº¸´Ù Àû´Ù´Â ¾ê±â°ÚÁö¿ä. */
strcmp ("hello", "hello, world")
) -44
/* Äĸ¶(,)¿Í ³Î¹®ÀÚÀÇ ºñ±³. °ø¹éÀÌ ÀÛ´Ù. */
strncmp ("hello", "hello, world"", 5)
) 0
/* ¾Õ¿¡¼ 5°³ ±îÁö´Â ¹®ÀÚ°¡ °°´Ù. */
strncmp ("hello, world", "hello, stupid world!!!", 5)
) 0
/* ¾Õ¿¡¼ 5°³ ±îÁö´Â ¹®ÀÚµéÀÌ °°´Ù. */
ÇÔ¼ö: int bcmp (const void *a1, const void *a2, size_t size)
ÀÌ ÇÔ¼ö´Â BSDÈ®ÀåÀ¸·Î memcmpÀÇ ÅðÈµÈ ±â´ÉÀ» °¡Á³´Ù°í º¸¸éµÈ´Ù.
5.6 ´ëÁ¶ ÇÔ¼öµé
¾î¶² Áö¿ªµé¿¡¼´Â, »çÀü ÆíÂù»óÀÇ ¼ø¼°¡ ¹®ÀÚ ÄÚµåµéÀÇ ¾ö°ÝÇÑ ¼ýÀÚÀû ¼ø¼¿Í´Â ´Ù¸£´Ù. ¿¹¸¦ µé ¾î ½ºÆäÀο¡¼ ´ëºÎºÐÀÇ ¹®ÀÚ(glyphs)´Â ºñ±³ÇÒ ¸ñÀûÀ϶§ ÇϳªÀÇ µ¶¸³ÀûÀÎ ¹®ÀÚ·Î °£ÁÖµÇÁö ¾Ê´Â ¿¢ ¼¾Æ®¿Í °°Àº ¹ßÀ½ ±¸º° ±âÈ£°¡ ÀÖ´Ù. ÇÑÆíÀ¸·Î´Â µÎ¹®ÀÚÀÇ ¹®ÀÚ¿ÀÎ 'll'ÀÌ 'l'ÀÇ ¹Ù·Î ´ÙÀ½¼ø¼¸¦ °® ´Â ´ÜÀÏ ¹®ÀÚ¿·Î Ãë±ÞµÇ´Â °æ¿ìµµ ÀÖ´Ù.
´ç½ÅÀº strcoll °ú strxfrm ÇÔ¼ö( Çì´õÆÄÀÏ 'string.h'¿¡ Á¤ÀǵÈ.)¸¦ »ç¿ëÇÏ¿© ÇöÀç Áö¿ª¿¡¼ »ç¿ëÇÏ ´Â ´ëÁ¶¼ø¼¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ¿À» ºñ±³ÇÒ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀÌ »ç¿ëµÉ Áö¿ªÀº LC_COLLATE ºÐ·ù ¿¡ ¼ÓÇÑ Áö¿ªÀ» ¼±ÅÃÇÏ¿© ÁöÁ¤ÇÒ¼ö ÀÖ´Ù.; 19Àå [Locals] 259ÆäÀÌÁö ÂüÁ¶.
Ç¥ÁØ C ¿¡¼´Â strcollÀ» À§ÇÑ ºñ±³ ¹®ÀÚ¿µµ strcmp¿Í °°´Ù.
È¿°úÀûÀ¸·Î, ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÏ·Á¸é ¹®ÀÚ¿¾È¿¡ ÀÖ´Â ¹®ÀÚµéÀ» ÇöÀçÁö¿ªÀÇ ´ëÁ¶¿¾ÈÀÇ ¹®ÀÚ À§Ä¡¸¦ Ç¥ÇöÇÏ´Â byte¿·Î ¹®ÀÚ¿¾ÈÀÇ ¹®ÀÚ¸¦ º¯Çü½ÃÄÑ ´ëÀÀµÇ°Ô »ç¿ëÇÏ¸é µÈ´Ù. °£´ÜÇÑ ÇüÅÂÀÇ byte¿À» ºñ±³ÇÔÀº Áö¿ªÀÇ ´ëÁ¶¿·Î ¹®ÀÚ¿À» ºñ±³ÇÏ´Â °Í°ú °°´Ù.
strcollÇÔ¼ö´Â ºñ±³¸¦ ÇϱâÀ§ÇÑ ¼ø¼ÀÇ Çϳª·Î, ¾Ï¹¬ÀûÀ¸·Î ÀÌ º¯ÇüÀ» ¼öÇàÇÑ´Ù. strxfrm¿Í ºñ±³Çϸé strxfrmÀº ¸í½ÃÀûÀ¸·Î ÀÌ º¯ÇüÀ» ¼öÇàÇÑ´Ù. ¸¸ÀÏ ´ç½ÅÀÌ µ¿ÀÏÇÑ ¹®ÀÚ¿À̳ª ¹®ÀÚ¿µéÀÇ ¼ÂÀ» ´ÙÁߺñ ±³Çϱ⠿øÇÑ´Ù¸é ÀÏ´Ü ¸ðµç ¹®ÀÚ¿µéÀº º¯ÇüÇϱâ À§ÇØ strxfrmÀ» »ç¿ëÇϰí ÀÌ¾î¼ strcmp·Î º¯ÇüµÈ ¹®ÀÚ¿µéÀ» ºñ±³ÇÏ´Â °äÀÌ ´õ È¿°úÀûÀÏ °ÍÀÌ´Ù.
ÇÔ¼ö: int strcoll (const char *s1, const char *s2)
strcollÇÔ¼ö´Â strcmp¿Í ºñ½ÁÇÏÁö¸¸ ¾î¶² Áö¿ªÀÇ ¹®ÀÚ¸¦ ´ëÁ¶Çϴµ¥ ¾²ÀδÙ. (the LC_COLLATE locale) ¿©±â¿¡ strcollÀ» »ç¿ëÇÏ¿© ºñ±³Çϱâ À§ÇØ ¹®ÀÚ¿µéÀ» Á¤·ÄÇÏ´Â ¿¹°¡ ÀÖ´Ù. ÀÌ ½ÇÁ¦ Á¤·Ä ¾Ë °í¸®ÁòÀº ¿©±â¿¡ ¾²¿©ÁöÁö ¾Ê¾Ò´Ù; qsortÀÌ´Ù. ( 15.3Àý[Array Sort Function] 217ÆäÀÌÁö ÂüÁ¶ ) ¿©±â ¿¡ ³ªÅ¸³ ÇÁ·Î±×·¥ ÄÚµåµéÀº ±×µéÀ» Á¤·ÄÇÏ´Â µ¿¾È ¹®ÀÚ¿µéÀ» ºñ±³Çϱâ À§ÇØ ¾î¶»°Ô ÇÏ´ÂÁö¸¦ ¸» ÇØÁÖ°í ÀÖ´Ù. ( ÀÌ ÀýÀÇ ³¡¿¡ strxfrmÀ» »ç¿ëÇÏ¿© À̰ÍÀ» ´õ È¿°úÀûÀ¸·Î ¼öÇàÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. )
/* À̰ÍÀº qsort°¡ »ç¿ëµÈ ºñ±³ÇÔ¼öÀÌ´Ù. */
int compare_elements (char **p1, char **p2)
{
return strcoll (*p1, *p2);
}
/* À̰ÍÀº Áö¿ª ´ëÁ¶¿À» »ç¿ëÇÏ¿© ¹®ÀÚµéÀ» Á¤·ÄÇϱâÀ§ÇÑ
ÇÔ¼öÀÇ ÁøÀÔÁöÁ¡ÀÌ´Ù. */
void sort_strings (char **array, int nstrings)
{
/* ¹®ÀÚ¿À» ºñ±³ÇÏ¿© Àӽù®ÀÚ¿À» Á¤·ÄÇÏ´Ù. */
qsort (array, sizeof (char *),
nstrings, compare_elements);
}
ÇÔ¼ö: size_t strxfrm (char *to, const char *from, size_t size)
ÀÌ ÇÔ¼ö´Â ÇöÀçÀÇ Áö¿ªÀ¸·Î ¼±ÅÃµÈ ´ëÁ¶ ¹®ÀÚ¿À» »ç¿ëÇÏ¿© ¹®ÀÚ¿À» º¯Çü½Ã±â´Â ÀÏÀ» Çϰí ÀÌ º¯ ÇüµÈ ¹®ÀÚ¿À» ¹è¿¾È¿¡ ÀúÀåÇÑ´Ù. characterÀÇ Å©±â·Î ÀúÀåµÈ´Ù. ( Á¾·á ³Î ¹®ÀÚ°¡ Æ÷ÇÔµÈ)
¹®ÀÚ¿¿¡¼ ¹®ÀÚ¿·Î ´ëÄ¡µÇ´Â ÇൿÀº Á¤ÀǵÇÁö ¾Ê¾Ò´Ù. 5.4Àý[Copying and Concatenation] 46ÆäÀÌÁö ¸¦ º¸¶ó.
¸®ÅϰªÀº º¯ÇüµÈ ¹®ÀÚ¿ÀÇ Àüü±æÀÌÀÌ´Ù. Å©±â°¡ °ªÀ¸·Î¼ À¯¿ëÇÏÁö´Â ¾ÊÁö¸¸ ¸¸ÀÏ ±×°ÍÀÌ Å©±âº¸ ´Ù Å©´Ù¸é ±×°ÍÀº º¯ÇüµÈ ¹®ÀÚ¿ÀÌ ¹è¿Å©±â¿¡ ÀüüÀûÀ¸·Î ¸ÂÁö ¾Ê´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ °æ¿ì¿¡ ¿ÀÁ÷ ±× ¹®ÀÚ¿ÀÇ ¾ç¸¸Å ½ÇÁ¦ÀûÀ¸·Î ¸ÂÃß¾î¼ ÀúÀåµÈ´Ù. ÀüüÀûÀ¸·Î º¯ÇüµÈ ¹®ÀÚ¿À» ¾òÀ¸·Á¸é strcfrm À» Á»´õ Å« Ãâ·Â ¹è¿À» »ç¿ëÇØ¼ ´Ù½Ã È£ÃâÇ϶ó. º¯ÇüµÈ ¹®ÀÚ¿Àº ¿ø·¡ÀÇ ¹®ÀÚ¿º¸´Ù ±æ¼ö µµ ªÀ»¼öµµ ÀÖ´Ù. ¸¸¾à Å©±â°¡ zero¶ó¸é ¾î¶² ¹®Àڵ鵵 ¾È¿¡ ÀúÀåµÇ¾îÁöÁö ¾Ê¾Ò´Ù. ÀÌ °æ¿ì strxfrmÀº º¯ÇöµÈ ¹®ÀÚ¿ÀÇ ±æÀ̰¡ µÇ¾îÁú ¹®ÀÚµéÀÇ ¼ö¸¦ ¸®ÅÏÇÑ´Ù. À̰ÍÀº ÇÒ´çÇϱâ À§ÇØ ¹®ÀÚ¿ ÀÇ Å©±â¸¦ °áÁ¤Çϴµ¥ À¯¿ëÇÏ°Ô ¾²ÀδÙ. ¸¸¾à ±× Å©±â °¡ zero¶ó°í ÇÏ´Â °ÍÀº ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù; ½ÉÁö¾î ³Î Æ÷ÀÎÅͶó°í ÇÒÁö¶óµµ ¿©±âÀÇ ¿¹´Â ´ç½ÅÀÌ ¸¹Àº ºñ±³¸¦ ¼öÇàÇÒ·Á°í °èȹÇÒ ¶§ strxfrmÀ» ¾î¶»°Ô »ç¿ëÇÒ¼ö ÀÖ´ÂÁö¸¦ º¸¿©ÁØ´Ù. À̰ÍÀº ÀüÀÇ ¿¹¿Í °°Àº °Í ÀÌÁö¸¸ Á»´õ ºü¸¥µ¥ ¿Ö³ÄÇÏ¸é ´Ù¸¥ ¹®ÀÚ¿°ú ¸î¹øÀÇ ºñ±³¸¦ ¼öÇàÇÏ´øÁö »ó°ü¾øÀÌ ´ÜÇѹøÀÇ º¯ÇüÀ» À§ÇÑ ÀÛ¾÷À» Çϱ⠶§¹®ÀÌ´Ù. ½ÉÁö¾î ÀúÀå°ø°£À» ÇÒ´çÇϰí ÇØÁ¦Çϱâ À§ÇØ ÇÊ¿äÇÑ ½Ã°£ÀÌ ¿ì¸®°¡ ¸¹Àº ¹®ÀÚ¿µéÀ» ÀúÁ¤Çϱâ À§ÇÑ ÇÊ¿äÇÑ ½Ã°£º¸´Ù ´õ Á¶±Ý ÇÊ¿äÇÏ´Ù.
struct sorter { char *input; char *transformed; };
/* À̰ÍÀº struct sorterÀÇ ¹è¿¿¡ Á¤·ÄÇϱâ À§ÇØ qsort¸¦
»ç¿ëÇÑ ºñ±³ÇÔ¼ö ÀÌ´Ù. */
int compare_elements (struct sorter *p1, struct sorter *p2)
{
return strcmp (p1->transformed, p2->transformed);
}
/* À̰ÍÀº Áö¿ª ´ëÁ¶¿À» »ç¿ëÇÏ¿© ¹®ÀÚ¿À» Á¤·ÄÇϱâ À§ÇÑ
ÇÔ¼öÀÇ ÁøÀÔÁöÁ¡ÀÌ´Ù. */
void sort_strings_fast (char **array, int nstrings)
{
struct sorter temp_array[nstrings];
int i;
/* temp_array¸¦ Á¤ÇÑ´Ù. °¢ ¿ä¼Ò´Â ÇϳªÀÇ ÀÔ·Â ¹®ÀÚ¿°ú ±× º¯ÇüµÈ ¹®ÀÚ¿À» Æ÷ÇÔÇÑ´Ù. */
for (i = 0; i < nstrings; i++)
{
size_t length = strlen (array[i]) * 2;
temp_array[i].input = array[i];
/* array[i]¸¦ º¯ÇüÇ϶ó. ù°·Î ¹öÆÛ°¡ ÃæºÐÈ÷ Å«Áö¸¦ ½ÃÇèÇØº¸¶ó. */
while (1)
{
char *transformed = (char *) xmalloc (length);
if (strxfrm (transformed, array[i], length) < length)
{
temp_array[i].transformed = transformed;
break;
}
/* Å« ¹öÆÛ·Î ´Ù½Ã ½ÃµµÇ϶ó */
free (transformed);
length *= 2;
}
}
/* ºñ±³ÇÒ º¯ÇüµÈ ¹®ÀÚ¿µé¿¡ ÀÇÇØ temp_array¸¦ Á¤·ÄÇÑ´Ù. */
qsort (temp_array, sizeof (struct sorter), nstrings, compare_elements);
/* ±×µéÀ» Á¤·ÄµÈ ¼ø¼·Î ¿µ±¸ÀûÀÎ ¹è¿¾È¿¡ ¿ä¼ÒµéÀ» ÀúÀåÇ϶ó. */
for (i = 0; i < nstrings; i++)
array[i] = temp_array[i].input;
/* ¿ì¸®°¡ ÇÒ´çÇß´ø ¹®ÀÚ¿À» ÇØÁ¦Ç϶ó */
for (i = 0; i < nstrings; i++)
free (temp_array[i].transformed);
}
ȣȯ¼º ÂüÁ¶ : ÀÌ ¹®ÀÚ¿ ´ëÁ¶ ÇÔ¼öµéÀº ANSI C¿¡ »õ·Î ÷°¡µÈ °ÍÀ¸·Î ¿À·¡µÈ C¿¡¼´Â ÀÌ¿Í µ¿µîÇÑ ÀÛ¾÷À» ÇÏ´Â °ÍÀº ¾Æ¹«°Íµµ ¾ø´Ù.
5.7 Ž»ö ÇÔ¼öµé
ÀÌÀýÀº ¹®ÀÚ¿°ú ¹è¿µé¿¡ Àû¿ëÇÒ ´Ù¾çÇÑ Á¾·ùÀÇ Å½»ö ¿ÀÆÛ·¹À̼ÇÀ» ¼öÇàÇÏ´Â ¶óÀ̺귯¸® ÇÔ¼öµé À» ¼³¸íÇϰí ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀ» Çì´õÆÄÀÏ 'string.h'¿¡ Á¤ÀǵǾî ÀÖ´Ù.
ÇÔ¼ö: void * memchr (const void *block, int c, size_t size)
ÀÌ ÇÔ¼ö´Â ºí·Ï¿¡¼ objectÀÇ ½ÃÀÛºÎÅÍ ÁöÁ¤µÈ ¸î¹ÙÀÌÆ® Å©±â³»¿¡¼ byte c( unsigned char·Î º¯È ½ÃŲ )°¡ ù ¹øÂ° ³ªÅ¸³°÷À» ã´Â´Ù. ¸®ÅϰªÀ» ¹ÙÀÌÆ®°¡ À§Ä¡ÇÑ °÷ÀÇ Æ÷ÀÌÅÍÀ̰ųª ¸¸¾à ¹ß°ßÇÏÁö ¸øÇÏ¸é ³Î Æ÷ÀÎÅÍÀÌ´Ù.
ÇÔ¼ö: char * strchr (const char *string, int c)
ÀÌ strchr ÇÔ¼ö´Â ¹®ÀÚc °¡ ù ¹øÂ° ³ªÅ¸³°÷À» ½ºÆ®¸µÀÇ ½ÃÀÛºÎÅÍ ³Î Á¾·á¹®ÀÚ±îÁö, ±× ¾È¿¡¼ ã´Â ´Ù. ¸®ÅϰªÀº ¹®ÀÚ°¡ À§Ä¡ÇÑ °÷À» °¡¸®Å°´Â Æ÷ÀÎÅÍÀ̰ųª ¹ß°ßÇÏÁö ¸øÇÏ¸é ³Î Æ÷ÀÎÅÍÀÌ´Ù.
¿¹¸¦ µé¾î,
strchr ("hello, world", 'l')
) "llo, world"
strchr ("hello, world", '?')
) NULL
À§ÀÇ strchrÀº 'l'ÀÌ hello¾È¿¡ ÀÖÀ¸¹Ç·Î ±× À§Ä¡¸¦ Æ÷ÀÎÅÍ·Î ¸®ÅÏÇÏ°Ô µÈ´Ù. ±×·¡¼ ±× Æ÷ÀÎÅ͸¦ Âü Á¶Çϸé "llo, world" °¡ ³ª¿À´Â °ÍÀÌ´Ù. ¹ØÀǰÍÀº '?'°¡ ¾øÀ¸¹Ç·Î ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏ.
Á¾·á³Î¹®ÀÚ´Â ¹®ÀÚ¿ÀÇ ÀϺκÐÀ¸·Î °£ÁֵȴÙ. ±×·¡¼ ´ç½ÅÀº c ÀÎÀÚ°ªÀ¸·Î ³Î¹®ÀÚ¸¦ ÁÙ¼ö ÀÖ°í, ±× ·¯¹Ç·Î ´ç½ÅÀº ¹®ÀÚ¿ÀÇ ³¡À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇØ¼ ¾òÀ»¼öµµ ÀÖ´Ù.
ÇÔ¼ö: char * index (const char *string, int c)
index´Â strchrÀÇ ´Ù¸¥À̸§ÀÌ´Ù; ±×µéÀº °ÅÀÇ µ¿ÀÏÇÏ´Ù.
ÇÔ¼ö: char *strrchr (const char *string, int c)
ÀÌ ÇÔ¼ö strrchrÀº ¹®ÀÚ¿ÀÇ ¾Õ¿¡¼, ¾ÕÀ¸·Î ÁøÇàÇÏ¸ç ¹®ÀÚ¿À» °Ë»öÇÏ´Â ´ë½Å¿¡ ¹®ÀÚ¿ÀÇ µÚ¿¡¼ ¹Ý ´ë¹æÇâÀ¸·Î Ž»öÇÏ´Â °ÍÀ» Á¦¿ÜÇϸé strchr°ú °°´Ù,
¿¹¸¦ µé¾î
strrchr ("hello, world", 'l')
) "ld"
µÚ¿¡¼ ºÎÅÍ Ã£¾Æ¼ ±× À§Ä¡¸¦ Æ÷ÀÎÅÍ·Î ³Ñ±â´Ï±î..±× Æ÷ÀÎÅ͸¦ ÂüÁ¶Çϸé "ld"°ªÀÌ ³ª¿À°ÚÁÒ.
ÇÔ¼ö: char * rindex (const char *string, int c)
rindex´Â strrchrÀÇ ´Ù¸¥ À̸§ÀÌ´Ù.; ±×µéÀº °ÅÀÇ µ¿ÀÏÇÏ´Ù.
ÇÔ¼ö: char * strstr (const char *haystack, const char *needle)
ÀÌÇÔ¼ö´Â ´ÜÀÏ ¹®ÀÚ º¸´Ù´Â ±ä substringÀ» Ž»öÇÏ´Â °ÍÀ» Á¦¿ÜÇϸé strchr°ú °°´Ù. À̰ÍÀº ã°íÀÚ ÇÏ´Â ¹®ÀÚ¿(haystack)¿¡¼ ã±â¸¦ ¿øÇÏ´Â ¹®ÀÚ¿ÀÌ(needle)³ªÅ¸³ ù ¹øÂ° ¹®ÀÚÀÇ À§Ä¡¸¦ Æ÷ÀÎÅÍ·Î ¸®ÅÏÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. ¸¸¾à ã°íÀÚ ÇÏ´Â ¹®ÀÚ¿ÀÌ °ø¹é¹®ÀÚ¿ À̶ó¸é haystackÀ» ¸®ÅÏÇÑ´Ù.
¿¹¸¦ µé¾î
strstr ("hello, world", "l")
) "llo, world"
strstr ("hello, world", "wo")
) "world"
¹Ø¿¡ strstr¸¸ º¸ÀÚ¸é "wo"ÀÇ ¹®ÀÚ¿À» "hello, world"¿¡¼ ãÀ¸´Ï±î Àֱ⠶§¹®¿¡ 'w'ÀÇ À§Ä¡¸¦ °¡ ¸®Å°´Â Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÕ´Ï´Ù. ±×·¡¼ ±× Æ÷ÀÎÅ͸¦ ÂüÁ¶Çϸé "world"°¡ µÇÁÒ.
ÇÔ¼ö: void * memmem (const void *needle, size_t neede_len, const void *haystack, size_t haystack_lne)
À̰ÍÀº strstr°ú °°Áö¸¸ needle°ú haystack´Â ³ÎÁ¾·á¸¦ °¡Áø ¹®ÀÚ¿ÀÌ ¾Æ´Ï¶ó byte arrayÀÌ´Ù. needle_lenÀº needleÀÇ ±æÀÌÀ̰í haystack_lenÀº haystackÀÇ ±æÀÌÀÌ´Ù. ÀÌ ÇÔ¼ö´Â GNUÈ®ÀåÀÌ´Ù.
ÇÔ¼ö: size_t strspn (const char *string, const char *skipset)
ÀÌ strspn("string span") ÇÔ¼ö´Â ¹®ÀÚ¿ sring¿¡¼ skipsetÀ» ±¸¼ºÇÏ´Â ¹®ÀÚµé·Î¸¸ ÀÌ·ç¾îÁø óÀ½ substringÀ» ã¾Æ¼ ±× ±æÀ̸¦ ¸®ÅÏÇÑ´Ù. skipset¾È¿¡¼ ¹®ÀÚµéÀÇ ¼ø¼´Â Áß¿äÇÏÁö ¾Ê´Ù.
¿¹¸¦ µé¾î
strspn ("hello, world", "abcdefghijklmnopqrstuvwxyz")
) 5
"hello, world"¿¡¼ µÚÀÇ ¹®ÀÚµé·Î¸¸ ±¸¼ºµÈ ºÎ¹®ÀÚ¿À» ãÀ¸¸é hello±îÁö°¡ µÇ°ÚÁÒ.. (,)´Â µÚÀÇ ¹®ÀÚ ¿¿¡ Æ÷ÇÔµÇÁö ¾Ê¾ÒÀ¸´Ï±î... ±×·¡¼ ±æÀ̰¡ 5.
ÇÔ¼ö: size_t strcspn (const char *string, const char *stopset)
strcspn("string complement span") ÇÔ¼ö´Â stopsetÀÇ ¹®ÀÚ¿À» ±¸¼ºÇÏ´Â ¹®ÀÚµé·Î ±¸¼ºµÇÁö ¾ÊÀº stringÀÇ Ã³À½ substringÀÇ ±æÀ̸¦ ¸®ÅÏÇÑ´Ù. ( ´Þ¸® ¸»ÇÏÀÚ¸é stopsetÀÇ ¹®ÀÚ¼ÂÀÇ ¸â¹öÀÎ, string¾ÈÀÇ Ã¹ ¹øÂ° ¹®ÀÚ°¡ ÀÖ´Â offsetÀ» ¸®ÅÏÇÑ´Ù. )
¿¹¸¦ µé¾î
strcspn ("hello, world", " \t\n,.;!?")
) 5
hello´ÙÀ½¿¡ µÚÀÇ ¹®Àڼ¿¡ Æ÷ÇÔµÈ ','°¡ ³ª¿ÔÀ¸´Ï±î, óÀ½ºÎÅÍ µÚÀÇ ¹®Àڼ¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â ±æÀÌ´Â Áï helloÀÇ ±æÀ̰¡ µÇ´Â°ÅÁÒ. ±×·¡¼ ¸®ÅϰªÀº 5.
ÇÔ¼ö: char * strpbrk (const char *string, const char *stopset)
strpbrk ("string pointer break") ÇÔ¼ö´Â strcspnÀÌ Ã³À½ substringÀÇ ±æÀ̸¦ ¸®ÅÏÇÏ´Â ´ë½Å¿¡ strpbrk´Â stopsetÀÇ ¹®Àڼ ¸â¹öÀÎ stringÀÇ Ã¹ ¹øÂ° ¹®ÀÚÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÏ´Â °ÍÀ» Á¦¿ÜÇϸé strcspn°ú ¿¬°ü µÇ¾îÀÖ´Ù. ¸¸ÀÏ ¹®ÀÚ¸¦ ¹ß°ßÇÏÁö ¸øÇÏ¸é ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.
¿¹¸¦ µé¾î
strpbrk ("hello, world", " \t\n,.;!?")
) ", world"
','°¡ ³ªÅ¸³ °÷ÀÇ À§Ä¡¸¦ Æ÷ÀÎÅÍ·Î ¸®ÅÏÇϹǷΠ±× Æ÷ÀÎÅ͸¦ ÂüÁ¶Çϸé ", world"°¡ µÇ´Â °ÍÀÌ´Ù.
5.8 ¹®ÀÚ¿¿¡¼ ÅäÅ« ã±â
ÇÁ·Î±×·¥ÀÌ º¸ÅëÀÇ stringÀ» ÅäÅ«À¸·Î ºÐ¸®ÇÏ´Â °Í ó·³ ¾î±¸³ª ¾îÈֺм®°ú °°Àº ±×·± °£´ÜÇÑ Á¾·ù ÀÇ ÀÏÀ» ÇÏ´Â °ÍÀº ²Ï ÀϹÝÀûÀÌ´Ù. ´ç½ÅÀº Çì´õÆÄÀÏ 'string.h'¿¡ Á¤ÀÇµÈ strtokÇÔ¼ö·Î ÀÌ ÀÏÀ» ÇÒ ¼ö °¡ ÀÖ´Ù.
ÇÔ¼ö: char * strtok (char *newstring, const char *delimiters)
stringÀº È£ÃâµÈ ÀÏ·ÃÀÇ strtokÇÔ¼ö¸¦ ÅëÇØ ÅäÅ«µé·Î ºÐ¸®µÇ¾î Áú¼ö ÀÖ´Ù.
ºÐ¸®½Ãų ¹®ÀÚ¿À» ¿ÀÁ÷ ù ¹øÂ° È£Ãâ¿¡¼ newstring Àμö·Î ÀνĵȴÙ. strtokÇÔ¼ö´Â ³»ºÎÀû »óȲ Á¤ º¸¸¦ ¸ÂÃß±â À§ÇØ À̰ÍÀ» »ç¿ëÇÑ´Ù. °°Àº ¹®ÀÚ¿¿¡¼ ºÎ°¡ÀûÀ¸·Î ÅäÅ«À» ¾ò±âÀ§ÇØ ´ÙÀ½ È£ÃâÀ» ÇÒ ¶§´Â newstringÀμö·Î ³ÎÆ÷ÀÎÅ͸¦ ÁÖ¾î¼ ÁöÁ¤½ÃŲ´Ù. ´ç½ÅÀÌ strtok¸¦ È£ÃâÇѵڿ¡ ¾î¶² ¶óÀ̺귯¸® ÇÔ¼öµµ strtok¸¦ È£ÃâÇÏÁö ¾Ê¾ÒÀ½À» º¸ÀåÇÑ´Ù.
delimitersÀμö´Â ÃßÃâµÉ ÅäÅ«À» µÑ·¯½Î°í ÀÖ´Â ±¸È¹¹®ÀÚÀÇ ¼ÂÀ» ÁöÁ¤ÇÑ ¹®ÀÚ¿ÀÌ´Ù. ÀÌ ¹®ÀÚ¿ ¼Â ¿¡¼ ù ¹øÂ° ¹®ÀÚµéÀº ¹ö·ÁÁø´Ù. ÀÌ ±¸È¹¹®ÀÚ ¼ÂÀÇ ¸â¹ö°¡ ¾Æ´Ñ ù ¹øÂ° ¹®ÀÚ´Â ´ÙÀ½ ÅäÅ«ÀÇ ½ÃÀÛ À» Ç¥½ÃÇÑ´Ù. ÅäÅ«ÀÇ ³¡Àº ±¸È¹¹®ÀÚ ¼ÂÀÇ ¸â¹öÀÎ ´ÙÀ½ ¹®ÀÚ¸¦ ãÀ½À¸·Î¼ ¹ß°ßµÈ´Ù. newstringÀμö ·Î ¾²¿©Áø ¿ø·¡ÀÇ ¹®ÀÚ¿¾ÈÀÇ ÀÌ ¹®ÀÚ´Â ³Î ¹®ÀÚ·Î ´Ù½Ã ¾²¿©Áö°í newstring¾ÈÀÇ ÅäÅ«ÀÇ ½ÃÀÛÁ¡À» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. ( Á¦°¡ ÀÌÇØÇѹٿ¡ µû¸£¸é ±¸È¹¹®ÀÚ¸¦ ã¾Æ¼ ÅäÅ«À» ¾òÀ¸¸é ±× ±¸È¹ ¹®ÀÚ´Â ³Î¹®ÀÚ·Î ´ëü½ÃÄÑ ¹ö¸°´Ù´Â ¸»ÀÎ °Í °°Àºµ¥... ¾Æ¸¶ ¸ÂÀ»°É¿ä...? )
strtokÀÇ ´ÙÀ½ È£Ãâ¿¡¼ ´ÙÀ½ ¹®ÀÚÀÇ ½ÃÀÛÁ¡Àº ÀüÀÇ ÅäÅ«ÀÇ ³¡À¸·Î Ç¥½ÃµÈ Á¡À» Çϳª Áö³ ÁöÁ¡ÀÌ´Ù. ±¸È¹¹®ÀÚÀÇ ¼ÂµéÀ» ÀÏ·ÃÀÇ strtok È£Ãâ¿¡¼ ¸ðµç È£ÃâÀÌ ¸ðµÎ °°Àº °ÍÀº ¾Æ´ÔÀ» ±â¾ïÇ϶ó. (Áï, ±¸È¹ ¹®ÀÚ¿µéÀº strtok¸¦ È£ÃâÇÒ ¶§ ¸¶´Ù ´Þ¶óµµ µÈ´Ù´Â ¾ê±â)
¸¸ÀÏ newstring ¹®ÀÚ¿ÀÇ ³¡¿¡ µµ´ÞµÇ¾ú°Å³ª ¹®ÀÚ¿ÀÇ ³ª¸ÓÁö°¡ ¿ÀÁ÷ ±¸È¹¹®Àڷθ¸ ±¸¼ºµÇ¾î ÀÖ´Ù ¸é strtok´Â ³ÎÆ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.
ÁÖÀÇ: strtok´Â ÆÄ½ÌÇÏ´Â ¹®ÀÚ¿À» º¯È½ÃŲ´Ù, ±×·¯¹Ç·Î ´ç½ÅÀº Ç×»ó strtok·Î ÆÄ½ÌÇϱâ Àü¿¡ ÀÓ ½Ã ¹öÆÛ¿¡ ¹®ÀÚ¿À» º¹»çÇØ ³õ¾Æ¾ß ÇÑ´Ù. ¸¸¾à ´ç½ÅÀÌ ´ç½Å ÇÁ·Î±×·¥ÀÇ ´Ù¸¥ ºÎºÐ¿¡¼ ¿Â ¹®ÀÚ¿ À» ¼öÁ¤Çϵµ·Ï strtok¿¡ Çã¿ëÇÏ¸é ´ç½ÅÀÌ ½º½º·Î ¹®Á¦¸¦ ÀÚóÇÏ´Â °ÍÀÌ´Ù; ±× ¹®ÀÚ¿Àº strtok¿¡ ÀÇÇØ º¯ÇüµÇ¾î ÆÄ½ÌÇÏ´Â µ¿¾È ±× µ¥ÀÌÅͰ¡ ´Ù¸¥ ¸ñÀûÀ¸·Î »ç¿ëµÇ¾î Áú¼öµµ ÀÖ´Ù.
½ÉÁö¾î »ó¼öÀÏÁöµµ ¸ð¸£´Â ¹®ÀÚ¿¿¡ ´ç½ÅÀÌ ¸í·ÉÀ» ³»¸®¸é strtok´Â ±×°ÍÀ» ¼öÁ¤ÇÏ·Á ½ÃµµÇÒ °ÍÀÌ °í ´ç½ÅÀÇ ÇÁ·Î±×·¥Àº °á±¹ ROM(read only memery)¿¡ ¾²±â¸¦ ½ÃµµÇϹǷΠ½É°¢ÇÑ ¿¡·¯½ÅÈ£¸¦ ¾òÀ» °ÍÀÌ´Ù. 21.2.1Àý [Program Error Signals] 273ÆäÀÌÁö ÂüÁ¶.
À̰ÍÀº ÀϹÝÀûÀÎ ¿øÄ¢ÀÇ Æ¯º°ÇÑ °æ¿ìÀÌ´Ù: ¸¸ÀÏ ÇÁ·Î±×·¥ÀÇ ÀϺκÐÀÌ ¾î¶² µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ ¼öÁ¤ÇÏ ·Á´Â ¸ñÀûÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù¸é ±×°ÍÀ» ÀÓ½ÃÀûÀ¸·Î ¼öÁ¤ÇÏ·Á ÇÒ ¶§ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æÇâÀÌ ÀÖ´Ù.
strtokÇÔ¼ö´Â ÀçÁøÀÔÇÏÁö ¾Ê´Â´Ù. 21.4.6Àý [Nonereentrancy] 290ÆäÀÌÁö, ÀçÁøÀÔÇÏ´Â ÀÌÀ¯³ª À§Ä¡ÀÇ Á߿伺¿¡ ´ëÇÑ ³íÀǸ¦ À§ÇØ,
¿©±â¿¡ strtokÀÇ °£´ÜÇÑ »ç¿ë¿¹°¡ ÀÖ´Ù.
#include <string.h>
#include <stddef.h>
. . .
char string[] = "words separated by spaces -- and, punctuation!";
const char delimiters[] = " .,;:!-";
char *token;
. . .
/* ¿©±â¼ ±¸È¹¹®ÀÚ´Â °ø¹é(" ") °ú ÄÝ·Ð, ¼¼¹ÌÄÝ·Ð, ´À³¦Ç¥, µ¥½¬("-") À̳׿ä... */
token = strtok (string, delimiters); /* token => "words" */
token = strtok (NULL, delimiters); /* token => "separated" */
token = strtok (NULL, delimiters); /* token => "by" */
token = strtok (NULL, delimiters); /* token => "spaces" */
token = strtok (NULL, delimiters); /* token => "and" */
token = strtok (NULL, delimiters); /* token => "punctuation" */
token = strtok (NULL, delimiters); /* token => NULL */
/* strtok´Â ±¸È¹¹®ÀÚ°¡ ³ª¿À¸é ±×°ÍÀ» ÅäÅ«À¸·Î Àß¶ó¼ ¸®ÅϽÃŰ³×¿ä.... */
****************¹®Á¦Á¡:process¸¦ "ÇÁ·Î¼¼½º"¶ó ÇÏ´À³Ä "ó¸®"¶ó ÇÏ´À³Ä***********************
**********************:link¸¦ "¿¬°á"·Î ÇÒ°ÍÀΰ¡ "¸µÅ©"¶ó ÇÒ°ÍÀΰ¡**************************