[ 1Àå, 2Àå, 3Àå, 4Àå, 5Àå, 6Àå, 7Àå, 8Àå, 9Àå, 10Àå, 11Àå, 12Àå, 13Àå, 14Àå, 15Àå, 16Àå, 17Àå, 18Àå, 19Àå, 20Àå, 21Àå, 22Àå, 23Àå, 24Àå, 25Àå, 26Àå, 27Àå, ºÎ·ÏA, ºÎ·ÏB,C, ºÎ·ÏD, GNU C ¶óÀ̺귯¸® ¸ñ·Ï ]

À̱ÛÀº ÇÏÀÌÅÚ ¼ÒÇÁÆ®¿þ¾îµ¿È£È¸ÀÇ ¼Ò¸ðÀÓÀÎ Á÷ÀåÀÎÀ» À§ÇÑ ¾¾¸ðÀÓ¿¡¼­ ÀåÀå 2³â°£ÀÇ ´ëÀåÁ¤À¸·Î ¹ø¿ªµÇ¾îÁø ¹®¼­ÀÔ´Ï´Ù. Áö±ÝÀº Á÷¾¾ÀåÀ» Áö³»°í ÀÖ´Â ±è¼Ò¿µ(flpigy)´Ô°ú Á¶¿øºÀ(thirnine)´Ô, °í¼®°©´Ô(sukgab)ÀÇ °øµ¿¹ø¿ªÀÔ´Ï´Ù.

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¸¦ "¿¬°á"·Î ÇÒ°ÍÀΰ¡ "¸µÅ©"¶ó ÇÒ°ÍÀΰ¡**************************