½ºÆ®¸µ ÇÔ¼ö¿¡ ´ëÇؼ­ Á¤¸®ÇÏ¿´½À´Ï´Ù. ¿©±â¿¡¼­ ºüÁø ÇÔ¼ö°¡ Àְųª À߸øµÈ ³»¿ëÀÌ ÀÖ´Ù¸é ¿¬¶ô Áֽñ⠹ٶø´Ï´Ù. Written by LHC ( s1662543@kiscos.sarang.net) - ½ºÆ®¸µ ÇÔ¼ö v1.2- 1. Á¾·ù int strcasecmp(const char *s1, const char *s2); char *strcat(char *dest, const char *src); char *strchr(const char *s, int c); int strcmp(const char *s1, const char *s2); int strcoll(const char *s1, const char *s2); char *strcpy(char *dest, const char *src); size_t strcspn(const char *s, const char *reject); char *strdup(const char *s); char *strfry(char *string); size_t strlen(const char *s); char *strncat(char *dest, const char *src, size_t n); int strncmp(const char *s1, const char *s2, size_t n); char *strncpy(char *dest, const char *src, size_t n); int strncasecmp(const char *s1, const char *s2, size_t n); char *strpbrk(const char *s, const char *accept); char *strrchr(const char *s, int c); char *strsep(char **stringp, const char *delim); size_t strspn(const char *s, const char *accept); char *strstr(const char *haystack, const char *needle); char *strtok(char *s, const char *delim); size_t strxfrm(char *dest, const char *src, size_t n); char *index(const char *s, int c); char *rindex(const char *s, int c); 2. ¼³¸í C¿¡¼­ÀÇ stringÀº ´Ü¼øÈ÷ 0¹ÙÀÌÆ®·Î ³¡³ª´Â ¹®ÀÚµéÀÇ ¹è¿­ÀÌ´Ù. string¿¡ °üÇÑ ¸ðµç ŸÀÔ°ú ¼±¾ðÀº string.h¿¡ µÇ¾îÀÖ´Ù. string 󸮸¦ À§ÇØ ÇÊ¿äÇÑ str1ÀÇ Ã¹¹ø° ÁÖ¼Ò¸¦ ¾Ë±âÀ§Çؼ± &str1[0]´ë½Å str1À̶ó°í¸¸ ÇÏ¸é µÈ´Ù. C¿¡¼­ ¹è¿­ÀÇ º¯¼ö¸íÀº ¹è¿­ÀÇ Ã¹¹ø° ÁÖ¼Ò¸¦ °¡¸£Å²´Ù´Â °ÍÀº À̱ÛÀ» º¸´Â »ç¶÷À̶ó¸é ¸ðµÎ ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ¹è¿­¿ª½Ã ³»ºÎÀûÀ¸·Î´Â Æ÷ÀÎÅͷνá 󸮵ȴÙ. Áï str1[i]°¡ ÀÖ´Ù¸é ÀÌÀÇ ½ÇÁ¦ 󸮴 ´ÙÀ½°ú °°ÀÌ µÈ´Ù. *(str1 + i) ÇÔ¼öÀÇ ÀÎÀÚ·Î½á ¹è¿­À» ÁÖ´Â °æ¿ì°¡ Á¾Á¾Àִµ¥ ÀÌ´Â ÁÁÀº ÄÚµùÀÌ ¾Æ´Ï´Ù. ¿Ö³ÄÇϸé ÀÎÀÚ·Î ³Ñ°ÜÁÖ´Â ¹è¿­Àº À§¿Í°°ÀÌ ´Ù½Ã Æ÷ÀÎÅÍ·Î º¯È¯µÇ´Â °úÁ¤À» °ÅÃÄ¾ß Çϱ⶧¹®¿¡ ÄÚµåÀÇ È¿À²¼ºÀ» ¶³¾î¶ß¸°´Ù. int func(char []) -> int func(char *) À§¿Í °°ÀÌ ÇÑ´ÙÇÏ¿© ¹è¿­°ú Æ÷ÀÎÅÍ°¡ °áÄÚ °°´Ù°í »ý°¢Çؼ± ¾ÈµÈ´Ù. char i[10]; Çϸé char ¸Þ¸ð¸®¸¦ 10¸¸Å­ ÇÒ´çÇÏ´Â °ÍÀÌÁö¸¸ char *i; ÇÏ¸é ´ÜÁö ¸Þ¸ð¸®¿¡ ÀÖ´Â ¹®ÀÚ¸¦ °¡¸£Å°´Â ¹øÁö¸¸ÀÌ ÇÒ´çµÈ´Ù. ´Ù½Ã À§ÀÇ ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ³Ñ°ÜÁÖ ´Â°Í¿¡ ´ëÇØ »ìÆ캸¸é ÀÌ¿Í°°Àº Â÷ÀÌ¿¡µµ ºÒ±¸ÇÏ°í ¿Ö Àú·¸°Ô ÇؾßÇÏ´ÂÁö Àǹ®ÀÌ µé°ÚÁö¸¸ ÇÔ¼ö¿¡¼­´Â ÀÎÀÚ·Î °ªÀ»³Ñ°ÜÁÙ¶§ ¹è¿­ÀÇ ¸ðµç°ªÀ» ³Ñ°ÜÁÙ¼ö°¡ ¾ø´Ù. µû¶ó¼­ ±× ¹øÁö¸¦ ³Ñ°ÜÁà¾ß µÇ´Âµ¥ ¾îÂ÷ÇÇ °°Àº °Å¶ó¸é ¹è¿­À» ½á¼­ ´Ù½Ã Æ÷ÀÎÅÍ·Î º¯È¯µÇ´Â °úÁ¤À» °ÅÄ¥ÇÊ¿ä°¡ ¾ø´Ù´Â °ÍÀÌ´Ù. ¿©±â¿¡¼­ ´õ ±íÀÌ µé¾î°¡´Â°ÍÀº ÀÌ ¹®¼­ÀÇ ¹üÀ§¸¦ ¹þ¾î³ª¹Ç·Î ´õ¿í ÀÚ¼¼ÇÑ »çÇ×Àº Æ÷ÀÎÅÍ¿Í ¹è¿­¿¡ ´ëÇÑ Ã¥À» Âü°íÇϱ⠹ٶõ´Ù.(http://pw2.netcom.com/~tjensen/ptr/pointers.htm) string ¸¦ ó¸®ÇÒ¶§ °¡À帹ÀÌ »ç¿ëÇÏ´Â ÇÔ¼ö·Î strlenÀÌ Àִµ¥ ÀÌ´Â ¾ÆÁÖ À¯¿ëÇÏ´Ù. strlenÀº ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ¸®ÅÏÇØÁØ´Ù(null ¹®ÀÚ´Â ±æÀÌ¿¡¼­ Á¦¿ÜµÈ´Ù). ´Ù½Ã¸»Çϸé null ¹®ÀÚÀÇ offsetÀ» ¸°ÅÏÇÏ´Â °ÍÀÌ´Ù. º¸Åë ¹®Á¦°¡ µÇ´Â °ÍÀº sizeof ¿Í ÀÌ°Å¿ÍÀÇ È¥µ¿ÀÌ´Ù. char a[1024] = "ÇÏÇÏÇÏ È£È£È£ È÷È÷È÷ ¸Þ·Õ"; ÀÖ´Ù°í Çϸé sizeof(a) ´Â 1024ÀÌ°í strlen(a)´Â 25ÀÌ´Ù. ¾ÕÀ¸·Î ÀÚÁÖº¸°Ô µÉ size_t´Â unsigned intÇüÀÌ´Ù. ½ºÆ®¸µ 󸮸¦ ÇÔ¿¡ ÀÖ¾î ±× Á¤È®ÇÑ ±æÀ̸¦ ¾Ë°í ½ÍÀº °æ¿ì°¡ ¸¹Àºµ¥ °ÅÀÇ ´ëºÎºÐÀÇ ÇØ´äÀº strlen()°¡ µÈ´Ù. ±×°ÍÀ¸·Î ÇØ°áÀÌ ¾ÈµÇ´Â °æ¿ì´Â ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ» ÅëÇؼ­ ¾Ë ¼ö ÀÖ´Â °æ¿ìµµ ÀÖ´Ù. ¿¹¸¦µé¸é read()³ª write()ÀÇ °æ¿ì¿¡´Â ¸®ÅÏ°ªÀÌ Àаųª ¾´ ±æÀÌÀÌ´Ù. 2.1 º¹»ç ÇÔ¼ö void *memcpy(void *dest, const void *src, size_t n); ÀÌ´Â src°¡ °¡¸£Å°´Â ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ºÎÅÍ n ¹ÙÀÌÆ®¸¦ dest ¿µ¿ªÀ¸·Î º¹»çÇÑ´Ù. ÁÖÀÇÇÒ Á¡Àº µÎ°³ÀÇ ¿µ¿ªÀÌ °ãÃÄÀÖÀ¸¸é ¾ÈµÈ´Ù. ¸¸¾à ±×·±°æ¿ì°¡ ÇÊ¿äÇÏ´Ù¸é À§Çؼ± memmove¸¦ »ç¿ëÇ϶ó. ¸®ÅÏ°ªÀº dest¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ void *memmove(void *dest, const void *src, size_t n); ÀÌ´Â src°¡ °¡¸£Å°´Â ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ºÎÅÍ n ¹ÙÀÌÆ®¸¦ dest¿µ¿ªÀ¸·Î º¹»çÇϴµ¥ µÎ ¸Þ¸ð¸® ¿µ¿ªÀº °ãÃÄÁ®µµ(overlap) µÈ´Ù. ¸®ÅÏ°ªÀº dest¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ void *memccpy(void *dest, const void *src, int c, size_t n); n ¹ÙÀÌÆ®¸¦ º¹»çÇϴµ¥ ¹®ÀÚ c¸¦ ¸¸³ª¸é ÁßÁöÇÑ´Ù. ¸®ÅÏ°ªÀº dest¿¡¼­ c¹®ÀÚ ´ÙÀ½À§Ä¡¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ. ½ÇÆд NULL void *memset(void *s, int c, size_t n); s°¡ °¡¸£Å°´Â °÷À» c·Î¼­ n¹ÙÀÌÆ® ¸¸Å­ ä¿î´Ù. ¸®ÅÏ°ªÀº s¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. char *strcpy(char *dest, const char *src); src°¡ °¡¸£Å©´Â ¸Þ¸ð¸® ¿µ¿ªÀÇ ³»¿ëÀ»(³Î¹®ÀÚ Æ÷ÇÔ) dest°¡ °¡¸£Å°´Â ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î º¹»çÇÑ´Ù. ÁÖÀÇÇÒ Á¡Àº dest´Â º¹»çµÇ´Â ¹®ÀÚ¿¡ ´ëÇØ ¸ðµÎ ÀúÀåÇÒ ¼ö ÀÖ¾î¾ßÇÑ´Ù. ¸®ÅÏ°ªÀº dest¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. char *strncpy(char *dest, const char *src, size_t n); strcpy¿Í °°°í ÁöÁ¤µÈ n ¹ÙÀÌÆ®¸¸À» º¹»çÇÑ´Ù. ³Î¹®ÀÚ´Â º¹»çµÇÁö ¾Ê´Â´Ù. ¸¸¾à src°¡ °¡¸£Å°´Â °÷ÀÇ ¹®ÀÚ¿­ ±æÀÌ°¡ nº¸´Ù ÀÛ´Ù¸é \0·Î½á ÆеùµÇ¾î º¹»çµÈ´Ù. strncpy¸¦ »ç¿ëÇÏ´Â °ÍÀÌ strcpy¿¡¼­ ¹ß»ýÇÒ ¼öÀÖ´Â ¹ö±×¸¦ ¿¹¹æÇÏ´Â °ÍÀ̱ä ÇÏÁö¸¸ º¸Åë ÀÌ°ÍÀº ¼öÇà¼Óµµ°¡ ´À¸®´Ù. ¿Ö³ÄÇÏ¸é »ó´ëÀûÀ¸·Î ÀÛÀº src¸¦ »ó´ëÀûÀ¸·Î Å« ¹öÆÛ¿¡ º¹»çÇÏ´Â °úÁ¤¿¡¼­ ¹öÆÛÀÇ ³ª¸ÓÁö¿µ¿ªÀ» ³Î¹®ÀڷΠä¿ì°Ô µÇ´Âµ¥ ¿©±â¿¡¼­ »ó´çÇÑ ½Ã°£À» º¸³»±â ¶§¹®ÀÌ´Ù. char *strcat(char *dest, const char *src); src°¡ °¡¸£Å°´Â ¸Þ¸ð¸® ³»¿ëÀ» dest°¡ °¡¸£Å°´Â °÷ÀÇ ³¡ÀÎ '\0' À§Ä¡ºÎÅÍ ºÙ¿© ³Ö´Â´Ù(³Î¹®ÀÚ±îÁö). overlapÀº Çã¿ëµÇÁö ¾ÊÀ¸¸ç dest´Â ºÎ¿©Áö°Ô µÉ string±îÁö Ä¿¹öÇÒ ¼öÀÖ´Â ¸Þ¸ð¸®¸¦ °¡Áö°íÀÖ¾î¾ßÇÑ´Ù. ¸®ÅÏ°ªÀº dest¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. strcat´Â ´ÙÀ½°ú °°´Ù. char * strcat (char *to, const char *from) { strcpy (to + strlen (to), from); return to; } char *strncat(char *dest, const char *src, size_t n); strcat¿Í °°À¸¸ç srcÀÇ n byte¸¸À» º¹»çÇÑ´Ù. ±×·±µ¥ ³¡¿¡ ³Î¹®ÀÚ±îÁö º¹»çµÇ±â¶§¹®¿¡ ½ÇÁ¦ º¹»çµÇ´Â Å©±â´Â n + 1ÀÌ µÊÀ» ÁÖÀÇÇØ¾ß ÇÑ´Ù. src°¡ nº¸´Ù ÀÛ´Ù¸é ³Î¹®ÀÚ·Î ÆеùµÈ´Ù. strncatÀÇ ¸®ÅÏ°ªÀº a[0]¿¡ ´ëÇÑ ¹øÁö°ªÀÌ°í overlapÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. char *strdup(const char *s); string duplicate. sÀÇ ¹®ÀÚ¿­À» º¹»çÇÏ°í ±× ¹®ÀÚ¿­À» °¡¸£Å°´Â Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. »õ·Î¿î ¹®ÀÚ¿­À» malloc¿¡ ÀÇÇؼ­ ¸Þ¸ð¸®¸¦ ÇÒ´ç ¹Þ°í free¸¦ ÅëÇؼ­ ÇØÁ¦ÇÒ ¼öÀÖ´Ù. ¸¸¾à ÇÒ´çÇÒ ¸Þ¸ð¸®°¡ ¾ø´Ù¸é ³Î Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. char *name; name = strdup("LHC"); free (name); char * strndup (const char *s, size_t size) s¿¡¼­ size ¸¸Å­ÀÇ ¹®ÀÚ¿­À» º¹»çÇÏ°í º¹»çµÈ ¹®ÀÚ¿­À» °¡¸£Å°´Â Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. size°¡ ¹®ÀÚ¿­ sº¸´Ù ÀÛ´Ù¸é size¸¸Å­ º¹»çÇÏ°í ³¡¿¡ ³ÎÆ÷ÀÎÅ͸¦ ³Ö¾îÁØ´Ù. 2.2 ºñ±³ ÇÔ¼ö int memcmp(const void *s1, const void *s2, size_t n); s1°ú s2ÀÇ Ã³À½ n ¹ÙÀÌÆ®¸¦ ºñ±³ÇÑ´Ù. s1ÀÌ s2º¸´Ù Å©¸é 0º¸´Ù Å«°ªÀ» °°À¸¸é 0À» ÀÛÀ¸¸é À½¼ö°ªÀ» ¸®ÅÏÇÑ´Ù. ÀÓÀÇÀÇ ¹è¿­¿¡¼­ µÎ°³°¡ °°ÀºÁö ¾Ê°°ÀºÁö¸¦ Å×½ºÆ®Çϴµ¥ À̸¦ »ç¿ëÇϴ°ÍÀº ¾ÆÁÖ À¯¿ëÇÏ´Ù. ÇÏÁö¸¸ ¹ÙÀÌÆ® ¼ö°¡ ´Ù¸¥ ¹è¿­»óÀÇ byte-wise ordering ºñ±³¸¦ Çϴ°ÍÀº Àǹ̾ø´Â ÁþÀÌ´Ù. ¿¹¸¦µé¸é ½Ç¼öÇü Æ÷ÀÎÅÍ·Î ±¸¼ºµÈ ¸Þ¸ð¸®»óÀÇ 1 byte-wise orderingÀº ½Ç¼öÇü Æ÷ÀÎÅÍ º¯¼öµé»çÀÌÀÇ °ü°è¿¡ ´ëÇØ ¾î¶²°Íµµ ¸»ÇØÁÖÁö ¾Ê´Â´Ù. ¶Ç´Ù¸¥ ÁÖÀÇÇØ¾ß ÇÒ »çÇ×À¸·Î holes¸¦ Æ÷ÇÔÇÏ´Â °´Ã¼µéÀ» ºñ±³ÇÒ ¶§ÀÌ´Ù. holes´Â ÆеùÇÏ¿© »ý±â´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ¸»Çϴµ¥ ÆеùÀ̶õ ¿¹¸¦µé¾î 1byte¾¿ ÁÖ°í¹Þ´Â »óȲÀÌ ÀÖ´Ù°í ÇÒ¶§ ¾î¶² ÇÔ¼ö¿¡¼­ 5bit¸¸À» ¸®ÅÏÇÑ´Ù¸é ±×¸¦ ±ÔÁ¤¿¡ ¸Â°Ô ÁÖ°í ¹Þ±â À§Çؼ± 8bit·Î ¸¸µé¾î¾ß ÇÑ´Ù. À̶§ ¸ðÀÚ¶ó´Â 3ºñÆ®¸¦ ³Î·Î ä¿ìµçÁö ¹¹·Î ä¿ìµç°£¿¡ ÀÌ·¸°Ô ä¿ì´Â ÇàÀ§¸¦ ÀÏÄÆ´Â ¿ë¾îÀÌ´Ù. ÀÌ·¸°Ô ÆеùµÈ holesÀÇ ³»¿ëÀº ¹«¾ùÀÌ µé¾î °¥Áö ¾Ë ¼ö¾ø±â¶§¹®¿¡ byte-wise ºñ±³ ¼öÇà½Ã ¹®Á¦¸¦ ÀÏÀ¸Å³¼ö ÀÖ´Ù. µû¶ó¼­ °á°ú¿¡ ´ëÇØ È®½ÇÈ÷ ÇÏ·Á¸é component-wise ºñ±³¸¦ ÇؾßÇÑ´Ù. struct foo { unsigned char tag; union { double f; long i; char *p; } value; }; Áï À§¿Í °°Àº fooÀÇ ¸â¹ö µ¥ÀÌÅ͸¦ ºñ±³Çϱâ À§Çؼ± memcpy¸¦ »ç¿ëÇϴ°ͺ¸´Ù ´Ù¸¥ Ưº°ÇÑ ÇÔ¼ö¸¦ »ç¿ëÇϴ°ÍÀÌ ´õ ³´´Ù. int strcmp(const char *s1, const char *s2); s1°ú s2¸¦ ºñ±³ÇÏ°í ¸®ÅÏ°ªÀº memcmp¿Í °°´Ù. strcmp´Â ´ÙÀ½°ú °°ÀÌ ÀÌ·ç¾îÁ®ÀÖ´Ù. int strcmp(s1, s2) register const char *s1, *s2; { while (*s1 == *s2++) if (*s1++ == 0) return (0); return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1)); } int strncmp(const char *s1, const char *s2, size_t n); s1ÀÇ Ã³À½ n ¹ÙÀÌÆ®¸¸À» ºñ±³ÇÏ°í ³ª¸ÓÁö´Â strcmp¿Í °°´Ù. ´ÙÀ½Àº ¾Æ½ºÅ° Äڵ带 ±â¹ÝÀ¸·Î ÇÏ´Â ½Ã½ºÅÛ¿¡¼­ÀÇ °á°úÀÌ´Ù. strcmp ("hello", "hello") => 0 /* °°À¸¹Ç·Î ¸®ÅÏ°ªÀº 0 */ strcmp ("hello", "Hello") => 32 /* h¿Í HÀÇ ¾Æ½ºÅ° ÄÚµå Â÷´Â 32 */ strcmp ("hello", "world") => -15 /* h¿Í wÀÇ ¾Æ½ºÅ° ÄÚµå Â÷´Â 15 */ strcmp ("hello", "hello, world") => -44 /* ³Î¹®ÀÚ¿Í ',' ¿ÍÀÇ ¾Æ½ºÅ°ÄÚµå Â÷´Â 44 */ strncmp ("hello", "hello, world", 5) => 0 /* óÀ½ 5¹ÙÀÌÆ®´Â °°´Ù µû¶ó¼­ ¸®ÅÏ°ªÀº 0*/ strncmp ("hello, world", "hello, stupid world!!!", 5) => 0 /* óÀ½ 5¹ÙÀÌÆ®´Â °°´Ù µû¶ó¼­ ¸®ÅÏ°ªÀº 0 */ int strcasecmp(const char *s1, const char *s2); strcmp¿Í °°´Ù. int strncasecmp(const char *s1, const char *s2, size_t n); strncmp¿Í °°´Ù. 2.3ºñ±³ Á¤¿­À» À§ÇÑ ÇÔ¼ö ( collation function ) ¹®ÀÚ¸¦ ºñ±³³ª Á¤¿­Çϱâ À§Çؼ± »ç¿ëÇÏ´Â ¹®ÀÚÀÇ Äڵ尪À» ¾Ë¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é ¾ËÆĺªÀÇ °æ¿ì a´Â 0x61¹øÀÇ ¾Æ½ºÅ° Äڵ带 °®´Â´Ù. À̸¦ ÅëÇÏ¿© ¿ì¸®´Â ¹®ÀÚÀÇ ¼ø¼­¸¦ ¾Ë¼öÀÖ´Ù. ±×·±µ¥ ¹®Á¦´Â ºñ¿µ¾î±Ç¿¡¼­ÀÌ´Ù. ±×µéÀÇ ¹®ÀÚ¿¡ ´ëÇÑ Äڵ尪ÀÌ ÇÊ¿äÇÑ´Ù ÀϹÝÀûÀÎ ÇÁ·Î±×·¥¿¡¼­´Â ±×¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë¼ö ¾ø±â¶§¹®¿¡ Á¤¿­À» ÇÒ¼ö¾ø°ÔµÈ´Ù. ±×·¡¼­ ÇÊ¿äÇÑ °ÍÀÌ ·ÎÄÉÀÏÀ̶õ °ÍÀε¥ ÀÌ°ÍÀº »ç¿ëÀÚ°¡ »ç¿ëÇÏ´Â ³ª¶óÀÇ ¹®ÀÚ¿¡ °üÇÑ Á¤º¸¸¦ °¡Áö°íÀÖ´Ù. ±×·¡¼­ ÇÁ·Î±×·¥Àº ±× ·ÎÄÉÀÏÀ» Âü°íÇÏ¿© Á¤¿­À̳ª ±âŸ ±× ³ª¶ó ¹®ÀÚ¿¡ °üÇÑ Ã³¸®¸¦ ÇÒ¼öÀÖ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇöÀçÀÇ ·ÎÄÉÀÏ¿¡ ¸Â°Ô ºñ±³ ÇØÁÖ´Â ÇÔ¼ö·Î strcoll°ú strxfrmÀÌ ÀÖ´Ù. À̵é ÇÔ¼öµéÀº ·ÎÄÉÀÏ categoryÁß LC_COLLATE°ªÀ» »ç¿ëÇÑ´Ù. Ç¥ÁØ C¿¡¼­ strcollÀÇ ºñ±³ ¹æ½ÄÀº strcmp¿Í µ¿ÀÏÇÏ´Ù. int strcoll(const char *s1, const char *s2); ÇöÀçÀÇ locale¸¦ »ç¿ëÇÏ¿© µÎ ¹®ÀÚ¿­À» ºñ±³ÇÑ´Ù. ¸®ÅÏ°ªÀº memcpy¿Í °°´Ù. (¿¹Á¦) qsort¸¦ ÀÌ¿ëÇÑ strcoll »ç¿ë¿¹Á¦. int compare_elements (char **p1, char **p2) { return strcoll (*p1, *p2); } /* This is the entry point---the function to sort strings using the locale's collating sequence. */ void sort_strings (char **array, int nstrings) { /* Sort temp_array by comparing the strings. */ qsort (array, sizeof (char *), nstrings, compare_elements); } size_t strxfrm(char *dest, const char *src, size_t n); strxfrmÀº src ½ºÆ®¸µÀ» ¾î¶² ÆûÀ¸·Î º¯È¯½ÃÅ°´Âµ¥ strxfrmÀ¸·Î º¯È¯µÈ µÎ°³ÀÇ ½ºÆ®¸µÀ» strcmp 󸮸¦ ÇÏ¸é º¯È¯µÇ±âÀüÀÇ µÎ°³ÀÇ ½ºÆ®¸µÀ» strcoll ó¸®ÇÑ°Í°ú °°Àº °á°ú¸¦ °®°Ô µÈ´Ù. º¯È¯µÈ n°³ ¸¸Å­ÀÇ ¹®ÀÚµéÀ» dest¿¡ ¾´´Ù. º¯È¯Àº LC_COLLATE¿¡ ¼³Á¤µÇ ÀÖ´Â ÇöÀç ·ÎÄÉÀÏÀ» µû¸¥´Ù. overlapÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. ¸®ÅÏ°ªÀº Àüü º¯È¯µÈ ¹®ÀÚÀÇ ¹ÙÀÌÆ® ¼öÀÌ°í(\0´Â Á¦¿Ü) n¿¡ ¿µÇâ ¹ÞÁö ¾Ê´Â´Ù. ¸¸¾à º¯È¯µÈ ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ n°ú °°°Å³ª Å©´Ù¸é dest¿¡ µé¾î°£ ³»¿ëÀº Á¤È®ÇÏÁö ¾ÊÀ½À» ÁÖÀÇÇØ¾ß ÇÑ´Ù. Á¤È®ÇÑ dest¸¦ ¾òÀ¸·Á¸é ´Ù½ÃÇѹø ´õÅ« »çÀÌÁî·Î strxfrmÀ» È£ÃâÇؾßÇÑ´Ù. ¸¸¾à nÀÌ 0ÀÌ¸é ¾î¶² ¹®ÀÚµµ dest¿¡ º¹»çÇÏÁö ¾Ê°í ´ÜÁö Àüü º¯È¯µÈ ¹®ÀÚ¿­ÀÇ ±æÀ̸¸À» ¸®ÅÏÇÏ°í destÀÇ »çÀÌÁî¿¡µµ ÀüÇô ¿µÇâ ¹ÞÁö¾È±â ¶§¹®¿¡ º¯È¯µÈ ¹®ÀÚÀÇ ±æÀ̸¦ ¾Ë¶§ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼öÀÖÀ»°ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. 1 + strxfrm(NULL, "º¯È¯ÇÒ ¹®ÀÚ¿­", 0) LC_COLLATE´Â Á¤±Ô½Ä¿¡¼­ °Ë»öÀ̳ª ½ºÆ®¸µ Á¤·ÄÀ» À§ÇØ »ç¿ëµÇ´Â ·ÎÄÉÀÏ °ªÀÌ´Ù. ·ÎÄÉÀÏ category¿¡ ´ëÇؼ­ ´õ ÀÚ¼¼ÇÑ »çÇ×À» º¸·Á¸é man setlocale·Î È®ÀÎÇϱ⠹ٶõ´Ù. setlocaleÀº ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ·ÎÄÉÀÏÀ» ¼³Á¤ÇÏ´Â ÇÔ¼öÀÌ´Ù. ÇöÀç ÀÚ½ÅÀÇ ¿î¿µÃ¼Á¦¿¡¼­ »ç¿ëÁßÀÎ ·ÎÄÉÀÏÀ» È®ÀÎÇÏ·Á¸é locale¶õ ¸í·ÉÀ» ÁÖ¸éµÈ´Ù. [root@LHC rc.d]# locale LANG=ko_KR.eucKR LC_CTYPE="ko_KR.eucKR" LC_NUMERIC="ko_KR.eucKR" LC_TIME="ko_KR.eucKR" LC_COLLATE="ko_KR.eucKR" LC_MONETARY="ko_KR.eucKR" LC_MESSAGES="ko_KR.eucKR" LC_ALL=ko_KR.eucKR [¿¹Á¦] ´ÙÀ½Àº strcollÀÇ ¿¹Á¦¿Í °°Àº ¿ªÇÒÀ» ÇÏ´Â ¼Ò½ºÀε¥ ½ºÆ®¸µ º¯È¯À» 1¹ø¸¸ Çϱ⠶§¹®¿¡ È¿À²ÀûÀÌ°í ÈξÀ ºü¸£´Ù. ¿©·¯¹ø ºñ±³¸¦ ÇÒ¶§ À¯¿ëÇÒ °ÍÀÌ´Ù. struct sorter { char *input; char *transformed; }; /* This is the comparison function used with qsort to sort an array of struct sorter. */ int compare_elements (struct sorter *p1, struct sorter *p2) { return strcmp (p1->transformed, p2->transformed); } /* This is the entry point---the function to sort strings using the locale's collating sequence. */ void sort_strings_fast (char **array, int nstrings) { struct sorter temp_array[nstrings]; int i; /* Set up temp_array. Each element contains one input string and its transformed string. */ for (i = 0; i < nstrings; i++) { size_t length = strlen (array[i]) * 2; char *transformed; size_t transformed_lenght; temp_array[i].input = array[i]; /* First try a buffer perhaps big enough. */ transformed = (char *) xmalloc (length); /* Transform array[i]. */ transformed_length = strxfrm (transformed, array[i], length); /* If the buffer was not large enough, resize it and try again. */ if (transformed_length >= length) { /* Allocate the needed space. +1 for terminating NUL character. */ transformed = (char *) xrealloc (transformed, transformed_length + 1); /* The return value is not interesting because we know how long the transformed string is. */ (void) strxfrm (transformed, array[i], transformed_length + 1); } temp_array[i].transformed = transformed; } /* Sort temp_array by comparing transformed strings. */ qsort (temp_array, sizeof (struct sorter), nstrings, compare_elements); /* Put the elements back in the permanent array in their sorted order. */ for (i = 0; i < nstrings; i++) array[i] = temp_array[i].input; /* Free the strings we allocated. */ for (i = 0; i < nstrings; i++) free (temp_array[i].transformed); } 2.4 °Ë»öÇÔ¼ö void *memchr(const void *s, int c, size_t n); s°¡ °¡¸£Å°°í ÀÖ´Â ¹®ÀÚ¿­¿¡¼­ n¹ø° À̳»¿¡¼­ óÀ½ ³ª¿À´Â c¸¦ ã´Â´Ù. char¸¦ ã´Âµ¥ int c·Î ¼±¾ðµÇ ÀÖÀ½¿¡ ÀǾÆÇÒ Áöµµ ¸ð¸£°ÚÁö¸¸ c´Â ã´Â °úÁ¤¿¡¼­ unsigned char·Î º¯È¯µÈ´Ù. ¸®ÅÏ°ªÀº ã¾Ò´Ù¸é ¹®ÀÚ°¡ À§Ä¡ÇÑ °÷ÀÇ Æ÷ÀÎÅ͸¦ ¸øãÀ¸¸é ³ÎÆ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. char *strchr(const char *s, int c); s°¡ °¡¸£Å°°í ÀÖ´Â ¹®ÀÚ¿­¿¡¼­ c¸¦ ã´Â´Ù. Á¾·á¹®ÀÚÀÎ ³Î¹®ÀÚ ¿ª½Ã ½ºÆ®¸µÀÇ ºÎºÐÀ¸·Î½á °£ÁֵȴÙ. µû¶ó¼­ C¸¦ ³Î¹®ÀÚ·Î ÁÜÀ¸·Î½á ¹®ÀÚ¿­ÀÇ ³¡ ¹øÁö¸¦ ¾Ë¾Æ³»´Âµ¥ ÀÌ¿ëÇÒ ¼öÀÖ´Ù. ¸®ÅÏ°ªÀº ã¾Ò´Ù¸é ¹®ÀÚ°¡ À§Ä¡ÇÑ °÷ÀÇ Æ÷ÀÎÅ͸¦ ¸øãÀ¸¸é ³ÎÆ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. [¿¹Á¦] strchr ("hello, world", 'l') => "llo, world" strchr ("hello, world", '?') => NULL char *strrchr(const char *s, int c); s°¡ °¡¸£Å°´Â ¹®ÀÚ¿­¿¡¼­ ¸¶Áö¸· ¹ß»ýÇÑ c¸¦ ã´Â´Ù. ¸®ÅÏ°ªÀº ãÀ¸¸é ¸¶Áö¸· ¹ß»ýÇÑ cÀÇ ÁÖ¼Ò¸¦ ¸øãÀ¸¸é ³ÎÀ» ¸®ÅÏÇÑ´Ù. ³Î¹®ÀÚ ¿ª½Ã ½ºÆ®¸µÀÇ ÀϺηΠ°£ÁֵȴÙ. [¿¹Á¦] strrchr ("hello, world", 'l') => "ld" size_t strspn(const char *s, const char *accept); ÀÌ ÇÔ¼ö´Â s°¡ °¡¸£Å°´Â ¹®ÀÚ¿­¿¡¼­ accept·Î ±¸¼ºµÈ ¹®ÀÚ°¡ ¾È³ª¿Ã¶§ ±îÁö ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ °è»êÇÑ´Ù. ¸®ÅÏ°ªÀº ±× ±æÀÌÀÌ´Ù. strspnÀº string spanÀ̶ó Àд´Ù. ¿¹¸¦ µé¸é strspn ("hello, world", "abcdefghijklmnopqrstuvwxyz") => 5 accept·Î ±¸¼ºµÈ ¹®ÀÚ°¡ ¾È³ª¿Ã¶§±îÁöÀÇ ±æÀÌ´Â 5ÀÌ´Ù. ','´Â accept¿¡ Á¤ÀǵǾî ÀÖÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ¸¸¾à accpet·Î ", abcdefghijklmnopqrstuvwxyz" ÇØÁÖ¸é 13À̶ó°í ¹®ÀÚ¿­ Àüü ±æÀ̸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù. accept ¹®ÀÚÀÇ ¼ø¼­´Â ¾î¶»°Ô µÇµç »ó°üÀÌ ¾ø´Ù. size_t strcspn(const char *s, const char *reject); string complement span À̶ó ÀÐÀ¸¸ç strspnÀÇ ¹Ý´ëÀÌ´Ù. Á» Çì±ò¸±Áöµµ ¸ð¸£°Ú´Âµ¥ reject·Î ±¸¼ºµÈ ¹®ÀÚ°¡ ³ª¿Ã¶§±îÁöÀÇ ±æÀ̸¦ ¸®ÅÏÇØ ÁØ´Ù. strcspn ("hello, world", ","); => 5 char *strpbrk(const char *s, const char *accept); string point break¶ó ÀÐÀ¸¸ç ÇÏ´Â ÀÐÀº strcspn°ú ºñ½ÁÇÏ´Ù. ´Ù¸¥Á¡Àº accept¿¡ Á¤ÀÇµÈ ¹®ÀÚ°¡ óÀ½ ³ª¿À´Â °÷ÀÇ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁشٴ Á¡ÀÌ´Ù. [¿¹Á¦] strpbrk ("hello, world", " \t\n,.;!?") => ", world" char *strstr(const char *haystack, const char *needle); strchr°ú ºñ½ÁÇѵ¥ ´Ù¸¥Á¡Àº Çѹ®ÀÚ°¡ ¾Æ´Ñ ¹®ÀÚ¿­À» ã´Â´Ù´Â °ÍÀÌ´Ù. ³Î¹®ÀÚ´Â ºñ±³ÇÏÁö ¾Ê´Â´Ù. ¸®ÅÏ°ªÀº ãÀ¸¸é óÀ½ ¹ß»ýÇÑ °÷ÀÇ Æ÷ÀÎÅ͸¦ ¸øãÀ¸¸é ³ÎÀ» ¸®ÅÏÇÑ´Ù. [¿¹Á¦] strstr ("hello, world", "l") => "llo, world" strstr ("hello, world", "wo") => "world" void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen); haystacklen ±æÀ̸¸Å­ÀÇ haystack¿¡¼­ needleÀÇ needlelen¸¸Å­ÀÇ ½ºÆ®¸µÀ» ã¾Æ¼­ óÀ½ ¹ß»ýÇÑ ¹øÁö¸¦ ¸®ÅÏÇÑ´Ù. ÀÌÇÔ¼ö´Â GNU È®ÀåÀÌ´Ù. libc 5.0.9¿¡¼­ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº À§ÇèÇÏ´Ù. °Å±â¿¡´Â needle¿Í haystack ÀÎÀÚ°¡ ¼­·Î ¹Ù²î¾î ÀÖ°í needleÀÌ Ã³À½ ¹ß»ýÇÑ °÷ÀÇ ³¡ ¹øÁö¸¦ ¸®ÅÏÇÑ´Ù. libc 5.0.9´Â ¿©ÀüÈ÷ ¸¹ÀÌ »ç¿ëµÇ°í Àֱ⶧¹®¿¡ ÀÌ ÇÔ¼öÀÇ »ç¿ëÀº À§Çè ÇϹǷΠ»ç¿ëÀ» ÀÚÁ¦ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ libc³ª glibcµÑ´Ù ´ÙÀ½°ú °°Àº ¹ö±×°¡ ÀÖ´Ù. ¸¸¾à needleÀÌ ³ÎÀ̶ó¸é ¸®ÅÏ°ªÀº haystack°¡ ¾Æ´Ï¶ó haystack - 1ÀÌ µÈ´Ù. glibc 2.0.5´Â ´õ¿í ³ª»Û »óȲÀ» ¿¬ÃâÇϴµ¥ ÀÌ´Â haystackÀÇ ¸¶Áö¸· ¹ÙÀÌÆ®ÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. µû¶ó¼­ °áÄÚ needle¸¦ ³Î·Î ÁÖ°í »ç¿ëÇؼ­´Â ¾ÈµÇ¸ç Á¤ ÇÊ¿äÇÑ °æ¿ì°¡ ¾Æ´Ï¸é »ç¿ëÀ» ÇÏÁö ¸»¾Æ¾ß ÇÒ ÇÔ¼öÀÌ´Ù. char *index(const char *s, int c); strchrÀÇ ´Ù¸¥ À̸§À¸·Î ÇÏ´ÂÀÏÀº ¶È°°´Ù char *rindex(const char *s, int c); strrchrÀÇ ´Ù¸¥ À̸§À¸·Î ÇÏ´ÂÀÏÀº ¶È°°´Ù. 2.5 ÅäÅ« ÇÔ¼ö À̵éÀº °£´ÜÇÑ ±¸ºÐ ºÐ¼®À̳ª ÆĽÌÀ» ÇÒ¶§ »ç¿ëµÈ´Ù. char *strtok(char *s, const char *delim); ÀÌ ÇÔ¼ö´Â ÀÌÇØÇϴµ¥ ¾à°£ÀÇ ³ë·ÂÀ» ¿äÇÏ´Â ÇÔ¼ö·Î ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÒ°ÍÀÌ´Ù. char a[] = "ÇÏÇÏÇÏ ÀÌ°ÍÀº ÅäÅ«À» À§ÇÑ ¿¹ÀÔÁö¿ä"; char *p1, *p2, *p3, *p4, *p5; p1 = strtok(a, " "); p2 = strtok(NULL, " "); p3 = strtok(NULL, " "); p4 = strtok(NULL, " "); p5 = strtok(NULL, " "); delimÀÌ Ã³À½ ¹ß»ýÇÒ ¶§±îÁöÀÇ ¹®ÀÚ¸¦ ã°í ±×°ÍÀ» ³Î¹®ÀÚ·Î ´ëüÇÏ°í ¹®ÀÚ¿­ÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. µû¶ó¼­ p1Àº 'ÇÏ'¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ°¡ µÈ´Ù. ±×¸®°í ´ÙÀ½ ´Ü¾îÀÇ ½ÃÀÛÀ» °¡¸£Å°´Â Æ÷ÀÎÅ͸¦ ³»ºÎÀûÀ¸·Î ±â¾ïÇÑ´Ù. ±×·¸±â ¶§¹®¿¡ ù¹ø° ÀÎÀÚ¸¦ ´õÀÌ»ó ÁÙÇÊ¿ä°¡ ¾øÀ¸¹Ç·Î NULLÀ» ¾²´Â°ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸¸é È®½ÇÈ÷ ÀÌÇØ°¡ µÉ°ÍÀÌ´Ù. 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¸¦ »ç¿ëÇϸé string ÇÔ¼öÀÇ ³»¿ëÀÌ ¹Ù²î°ÔµÈ´Ù. µû¶ó¼­ constÇü string¿¡´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ ³»¿ëÀÌ À¯ÁöµÇ¾ß ÇÏ´Â ½ºÆ®¸µ¿¡ ´ëÇØ »ç¿ëÇÏ·Á¸é ¸ÕÀú º¹»ç¸¦ Çسí´ÙÀ½¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù. stringÀÇ ³»¿ëÀ» Çѹ®ÀÚ¾¿ Ãâ·Â Çغ¸¸é ´ÙÀ½°ú °°´Ù. wordsseparatedbyspaces-- and punctuation delim¿¡ ÁÖ¾îÁø ¹®ÀÚµéÀº ³ÎÆ÷ÀÎÅÍ·Î ¹Ù²î±â ¶§¹®¿¡ ¶ç¾î¾²±â°¡ ¾ÈµÈ°Íó·³ º¸ÀδÙ. "-- " ºÎºÐÀº ¾ÕÀÇ °ø°£ÀÌ ³Î·Î º¯È¯µÇ°í delim¿¡ ÁÖ¾îÁöÁö ¾ÊÀº ¹®ÀÚÀÇ ½ÃÀÛÀÎ a¸¦ °¡¸£Å°±â ¶§¹®¿¡ ±×¿Í °°ÀÌ Ãâ·ÂµÇ°í and´ÙÀ½ÀÇ °ø°£Àº and ¹Ù·Î ´ÙÀ½ÀÇ ','°¡ ³Î¹®ÀڷΠġȯµÇ°í delim¿¡ ÁÖ¾îÁöÁö ¾ÈÀº ù´Ü¾îÀÇ ½ÃÀÛÀÎ punc~·Î °¡±â¶§¹®¿¡ ±×¿Í °°ÀÌ Ãâ·ÂµÇ´Â °ÍÀÌ´Ù. char * strtok_r (char *newstring, const char *delimiters, char **save_ptr) strtok¿Í ºñ½ÁÇÏ´Ù. Â÷ÀÌÁ¡Àº strtok¿Í ´Þ¸® ´ÙÀ½ ÅäÅ«ÀÇ ½ÃÀÛÀ» ³»ºÎÀûÀ¸·Î ±â¾ïÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ È£ÃâÇÒ¶§ save_ptrÀ» ¼öµ¿À¸·Î Á¦°øÇØ Áà¾ß ÇÑ´Ù. 2¹ø° È£ÃâºÎÅÍ newstringÀ» ³Î·Î ÇÏ°í save_ptrÀ» ±×´ë·Î ÁÖ¸é strtok¿Í °°ÀÌ ÀÛµ¿ÇÏ°Ô µÈ´Ù. ÀÌ ÇÔ¼ö´Â POSIX.1b¿¡¼­ Á¦¾ÈµÇ¾ú´Ù. char *strsep(char **stringp, const char *delim); #include #include ... char string[] = "words separated by spaces -- and, punctuation!"; const char delimiters[] = " .,;:!-"; char *running; char *token; ... running = string; token = strsep (&running, delimiters); /* token => "words" */ token = strsep (&running, delimiters); /* token => "separated" */ token = strsep (&running, delimiters); /* token => "by" */ token = strsep (&running, delimiters); /* token => "spaces" */ token = strsep (&running, delimiters); /* token => "and" */ token = strsep (&running, delimiters); /* token => "punctuation" */ token = strsep (&running, delimiters); /* token => NULL */ ù¹ø° ÀÎÀÚ¸¦ ºÎ°¡ÀûÀ¸·Î ÁÜÀ¸·Î½á Áߺ¹ÀûÀÎ Á¢±ÙÀ» ÇÇÇÒ ¼öÀÖ´Ù. ¿òÁ÷ÀÌ´Â Æ÷ÀÎÅÍÀÇ ÃʱâÈ­´Â »ç¿ëÀÚ°¡ ÇÒ¼öÀÖ´Ù. strsep°¡ ¼º°øÇϸé delim¿¡ ÀÇÇØ ±¸ºÐµÇ´Â ÅäÅ«À» µû¶ó Æ÷ÀÎÅÍ´Â ¿òÁ÷ÀÌ°Ô µÈ´Ù. ¸®ÅÏ°ªÀº ´ÙÀ½ ÅäÅ«ÀÇ Ã³À½À» °¡¸£Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. delimÀÌ ¹ß°ßµÇÁö ¾ÊÀ¸¸é nullÀ» ¸®ÅÏÇÑ´Ù. 4.3BSD¿¡¼­ ³ª¿Â ÇÔ¼öÀÌ´Ù. 2.6 ±âŸ ÇÔ¼ö char *strerror(int errnum); errnum¿¡ ³Ñ°ÜÁø ¿¡·¯Äڵ带 ¼³¸íÇÏ´Â ¹®ÀÚ¿­À» ¸®ÅÏÇÑ´Ù. ´ÙÀ½Àº 1 ºÎÅÍ 19±îÁö errnum¿¡ ´ëÇÑ ¼³¸íÀÌ´Ù. errornum 0 : ¼º°ø errornum 1 : ¸í·ÉÀÌ Çã¿ëµÇÁö ¾ÊÀ½ errornum 2 : ±×·± ÆÄÀÏÀ̳ª µð·ºÅ丮°¡ ¾øÀ½ errornum 3 : ±×·± ÇÁ·Î¼¼½º°¡ ¾øÀ½ errornum 4 : Áß´ÜµÈ ½Ã½ºÅÛ È£Ãâ errornum 5 : ÀÔ·Â/Ãâ·Â ¿À·ù errornum 6 : ÀåÄ¡°¡ ¼³Á¤µÇÁö ¾Ê¾ÒÀ½ errornum 7 : Àμö ¸í´ÜÀÌ ³Ê¹« ±é´Ï´Ù errornum 8 : Exec Çü½Ä ¿À·ù errornum 9 : À߸øµÈ ÆÄÀÏ ±â¼úÀÚ errornum 10 : ÀÚ½Ä ÇÁ·Î¼¼½º°¡ ¾øÀ½ errornum 11 : ÀÚ¿øÀÌ ÀϽÃÀûÀ¸·Î »ç¿ë ºÒ°¡´ÉÇÔ errornum 12 : ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù errornum 13 : Çã°¡ °ÅºÎµÊ errornum 14 : À߸øµÈ ÁÖ¼Ò errornum 15 : ºí·° ÀåÄ¡°¡ ÇÊ¿äÇÔ errornum 16 : ÀåÄ¡³ª ÀÚ¿øÀÌ µ¿ÀÛ Áß errornum 17 : ÆÄÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù errornum 18 : ºÎÀûÀýÇÑ ÀåÄ¡°£ ¿¬°á errornum 19 : ±×·± ÀåÄ¡°¡ ¾øÀ½ char *strfry(char *string); ¹®ÀÚ¿­À» rand()¸¦ »ç¿ëÇÏ¿© ·£´ýÈ­ ÇÏ°í ·£´ýÈ­µÈ ¹®ÀÚ¿­¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. [Âü°íÀÚ·á] Linux man page Programming Language - C love_C ( Cambridge University Engineering Department) The GNU C Library Reference Manual