¾ÈÀüÇÑ ¹®ÀÚ¿­ ÇÔ¼öµé

2006-07-13 ½Å¿µÁø

C¾ð¾î Ç¥ÁØ¿¡ Æ÷ÇÔµÈ ¹®ÀÚ¿­ ÇÔ¼öµé Áß¿¡ ÀϺδ ¸Å¿ì À§ÇèÇÏ´Ù. ´ëÇ¥ÀûÀÎ ÇÔ¼ö°¡ strcpy¿Í sprintfÇÔ¼ö´Ù. ÀÌ µÎ ÇÔ¼öÀÇ °æ¿ì Ãâ·Â °ªÀ¸·Î ¹®ÀÚ¿­ Æ÷ÀÎÅ͸¦ Àü¼ÛÇÑ´Ù. ÇÏÁö¸¸ Ãâ·Â ¹®ÀÚ¿­ Æ÷ÀÎÅÍÀÇ Å©±â¸¦ ÀÔ·Â ¹ÞÁö ¾Ê±â ¶§¹®¿¡ ¹öÆÛ ¿À¹ö·±ÀÇ À§ÇèÀ» °¡Áö°í ÀÖ´Ù. ¹öÆÛ ¿À¹ö·±ÀÇ °æ¿ì º¸¾È»ó Ãë¾àÁ¡ÀÌ µÉ ¼ö ÀÖ´Ù. µû¶ó¼­ °ß°íÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§Çؼ­´Â µÇµµ·Ï ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.

¹öÆÛ ¿À¹ö·±

¹öÆÛ ¿À¹ö·±À̶õ ÇÁ·Î±×·¥ ³»ºÎ¿¡¼­ »ç¿ëÇÏ´Â ¸Þ¸ð¸® °ø°£À» ÇÁ·Î±×·¡¸Ó°¡ ±âÁ¸¿¡ ÀǵµÇß´ø °ÍÀ» ³Ñ¾î¼­¼­ µ¤¾î ¾²´Â °ÍÀ» ¸»ÇÑ´Ù. ½ºÅà °ø°£À» ħ¹üÇÏ´Â °ÍÀ» ½ºÅà ¿À¹ö·±, Èü °ø°£À» ħ¹üÇÏ´Â °ÍÀ» Èü ¿À¹ö·±À̶ó ÇÑ´Ù. ¾Æ·¡ ÄÚµå´Â ¾î¶»°Ô ½ºÅà ¿À¹ö·±ÀÌ ¹ß»ýÇÏ´Â Áö º¸¿©ÁØ´Ù.

À§ÀÇ Äڵ带 »ìÆìº¸¸é dest´Â ÃÖ´ë 4±ÛÀÚ¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¿Ö³ÄÇϸé C¾ð¾îÀÇ °æ¿ì ³¡À» ¾Ë¸®±â À§Çؼ­ NULL Á¾·á ¹®ÀÚ¸¦ »ç¿ëÇϱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ½ÇÁ¦·Î º¹»ç¸¦ ÇϰíÀÚ ÇÏ´Â ¼Ò½º ¹®ÀÚ¿­Àº 4±ÛÀÚº¸´Ù Å« ¹®ÀÚ´Ù. µû¶ó¼­ ÇÁ·Î±×·¡¸Ó°¡ Àâ¾ÆµÐ ¸Þ¸ð¸® °ø°£À» ħ¹üÇØ¼­ µ¤¾î¾²°Ô µÈ´Ù. ÀÌ·¸°Ô µÉ °æ¿ì ½ºÅÃÀÌ ±úÁö°í Äڵ尡 ¾û¶×ÇÑ °÷À¸·Î ¸®ÅϵǴ °á°ú¸¦ ¸¸µé ¼ö ÀÖ´Ù.

Windows¿¡¼­´Â ÀÌ·¯ÇÑ º¸¾È»ó Ãë¾àÇÑ ÇÔ¼öµéÀ» ´ëüÇÒ »õ·Î¿î ¾ÈÀüÇÑ ÇÔ¼öµéÀ» ÀÛ¼ºÇؼ­ Platform SDK¸¦ ÅëÇØ¼­ ¹èÆ÷Çϰí ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀº strsafe.h¿¡ µé¾îÀÖ´Ù. ¿ì¼± °£·«ÇÏ°Ô ¾î¶°ÇÑ ÇÔ¼öµéÀÌ µé¾î ÀÖ´ÂÁö »ìÆìº¸µµ·Ï ÇÏÀÚ.

±âÁ¸ÇÔ¼ö ´ëü ÇÔ¼ö
strcpy StringCbCopy, StringCbCopyEx
StringCchCopy, StringCchCopyEx
strncpy StringCbCopyN, StringCbCopyNEx
StringCchCopyN, StringCchCopyNEx
strcat StringCbCat, StringCbCatEx
StringCchCat, StringCchCatEx
strncat StringCbCatN, StringCbCatNEx
StringCchCatN, StringCchCatNEx
sprintf StringCbPrintf, StringCbPrintfEx
StringCchPrintf, StringCchPrintfEx
vsprintf StringCbVPrintf, StringCbVPrintfEx
StringCchVPrintf, StringCchVPrintfEx
gets StringCbGets, StringCbGetsEx
StringCchGets, StringCchGetsEx
strlen StringCbLength
StringCchLength

ÇÔ¼ö À̸§ÀÌ ±ÔÄ¢ÀûÀ¸·Î Áö¾îÁø ´öºÐ¿¡ ÇÔ¼öÀÇ Á¾·ù¸¦ ÇÑ´«¿¡ ÆÄ¾ÇÇÒ ¼ö ÀÖ´Ù. ÀüüÀûÀ¸·Î À» ³× °¡Áö Á¾·ùÀÇ ÇÔ¼ö°¡ ÀÖ´Ù. Cb, Cch°è¿­°ú ÀÏ¹Ý ÇÔ¼ö¿Í Ex ÇÔ¼ö°¡ ±×°ÍÀÌ´Ù. Cb°è¿­ÀÇ ÇÔ¼ö´Â ¹öÆÛ Å©±â¸¦ ÀÎÀÚ·Î ¹Þ´Â´Ù. Áï, ¹öÆÛ°¡ ¸î ¹ÙÀÌÆ® Å©±â¸¦ °¡Áö´À³Ä ÇÏ´Â °ÍÀ» ±âÁØÀ¸·Î »ï´Â´Ù. ¹Ý¸é¿¡ Cch°è¿­ ÇÔ¼öµéÀº ¹öÆÛÀÇ ±æÀ̸¦ ÀÎÀÚ·Î ¹Þ´Â´Ù. ¸î ±ÛÀÚ¸¦ ÀúÀåÇÒ ¼ö ÀÖ´À³Ä ÇÏ´Â °ÍÀ» ±âÁØÀ¸·Î »ï´Â´Ù. Ex ÇÔ¼ö´Â ÀÏ¹Ý ÇÔ¼öÀÇ ±â´É¿¡ ¹öÆÛÀÇ À߸²°ú ÆÐµùÀ» ´Ù·ç´Â Ãß°¡ÀûÀÎ ±â´ÉÀ» °¡Áø ÇÔ¼öµéÀÌ´Ù.

ÀÏ¹Ý ÇÔ¼öÀÇ °æ¿ì Ç¥ÁØ ÇÔ¼ö¿Í µ¿ÀÏÇÑ ÀÎÀÚ¸¦ ¹Þµµ·Ï µÇ¾î ÀÖ´Ù. ´ÜÁö Ãß°¡ÀûÀ¸·Î ¹öÆÛÀÇ Å©±â¸¦ Çϳª ´õ ¹Þ´Â´Ù. µû¶ó¼­ ¿©±â¼­´Â StringCbCopy¿Í StringCchPrintfÀÇ »ç¿ë¹ý¸¸ »ìÆìº¸µµ·Ï ÇϰڴÙ. ´Ù¸¥ ÇÔ¼öµéÀÇ ÀÚ¼¼ÇÑ »ç¿ë¹æ¹ýÀ» ¾Ë°í ½Í´Ù¸é MSDNÀ» Âü°íÇϵµ·Ï ÇÏÀÚ.

StringCbCopy ÇÔ¼öÀÇ ¿øÇüÀÌ´Ù. ÀÌ ÇÔ¼ö´Â strcpy¿Í µ¿ÀÏÇÑ ±â´ÉÀ» ÇÑ´Ù. pszDest¿¡´Â º¹»çµÉ ¹öÆÛ Æ÷ÀÎÅ͸¦, cbDest¿¡´Â pszDestÀÇ Å©±â¸¦, ±×¸®°í pszSrc¿¡´Â º¹»çÇÒ ¹®ÀÚ¿­ Æ÷ÀÎÅ͸¦ ³Ö¾îÁÖ¸é µÈ´Ù. cbDest¸¦ Á¦¿ÜÇϸé strcpy¿Í µ¿ÀÏÇÑ ÀǹÌÀÇ ÀÎÀÚ°¡ ¼ø¼­´ë·Î ÀԷµȴٴ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. °á°ú °ªÀº ÇÔ¼öÀÇ ¼º°ø ¿©ºÎ´Ù. ¼º°øÇÑ °æ¿ì S_OK¸¦ ¸®ÅÏ ÇÑ´Ù. À§¿¡ ³ª¿­µÈ ¸ðµç String°è¿­ ÇÔ¼öÀÇ ¸®ÅÏ °ªÀº HRESULT´Ù. COM¿¡ »ç¿ëµÇ´Â °Í°ú µ¿ÀÏÇÑ Å¸ÀÔÀ̱⠶§¹®¿¡ FAILED, SUCCEEDED¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¸é ¼Õ½±°Ô ¿¡·¯ ¿©ºÎ¸¦ üũÇÒ ¼ö ÀÖ´Ù. StringCbCopyÇÔ¼ö¸¦ »ç¿ëÇØ °£´ÜÇÑ ¹®ÀÚ¿­À» º¹»çÇÏ´Â °úÁ¤Àº ¾Æ·¡¿Í °°´Ù.

À§ÀÇ Äڵ带 ½ÇÇàÇØ º¸¸é ¿Ö StringCbCopy°¡ ¾ÈÀüÇÑÁö¸¦ ¾Ë ¼ö ÀÖ´Ù. À§ ÇÁ·Î±×·¥À» ½ÇÇàÇϸé dest°ªÀ¸·Î Hello°¡ Ãâ·ÂµÈ´Ù. ¿Ö³ÄÇϸé destÀÇ Å©±âÀÎ 6ÀÌ StringCbCopyÇÔ¼ö ³»ºÎ·Î µé¾î°¬±â ¶§¹®¿¡ °Å±â±îÁö¸¸ º¹»ç°¡ ÁøÇàµÈ °ÍÀÌ´Ù. ´õ ÀÌ»ó º¹»çÇÒ °æ¿ì ¹öÆÛ ¿À¹ö·±ÀÌ ¹ß»ýÇϱ⠶§¹®ÀÌ´Ù.

StringCbPrintf ÇÔ¼öÀÇ ¿øÇüÀÌ´Ù. ÀÌ ÇÔ¼ö´Â sprintf¿Í µ¿ÀÏÇÑ ±â´ÉÀ» ÇÑ´Ù. pszDest¿¡´Â Ãâ·ÂµÉ ¹öÆÛ¸¦, cchDest¿¡´Â pszDest¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Â ±ÛÀÚ ¼ö¸¦, ³¡À¸·Î pszFormat¿¡´Â Æ÷¸Ë ¹®ÀÚ¿­À» ³ÖÀ¸¸é µÈ´Ù. ¾Æ·¡¿Í °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¹®ÀÚ¿­À» ´Ù·ç´Â ÀÏÀº ÇÁ·Î±×·¡¹Ö °úÁ¤¿¡¼­ ±¤¹üÀ§ ÇÏ°Ô »ç¿ëµÈ´Ù. ÀϺΠÇÁ·Î±×·¥Àº ¹®ÀÚ¿­ ó¸® °úÁ¤ÀÌ ÇÁ·Î±×·¥ÀÇ ÀüºÎÀ̱⵵ ÇÏ´Ù. ÀÌó·³ ¹®ÀÚ¿­ ó¸® ÀÛ¾÷Àº ¸¹ÀÌ »ç¿ëµÇ´Â ¸¸Å­ °¡Àå ¸¹Àº ¹ö±×¿Í º¸¾È ÇãÁ¡ÀÌ ³ª¿À´Â °÷À̱⵵ ÇÏ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇÏ´Â °¡Àå ÁÁÀº ¹æ¹ýÀº ±âÁ¸ÀÇ ºÒ¿ÏÀüÇÑ ÇÔ¼öµéÀ» »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. ÀÌ·± ÀÌÀ¯ ¶§¹®¿¡ strsafe.h¸¦ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃŰ°Ô µÇ¸é Ç¥ÁØ ¹®ÀÚ¿­ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ºÎºÐ¿¡¼­´Â deprecated °æ°í°¡ ¹ß»ýÇÑ´Ù. ÇÏÁö¸¸ deprecated °æ°í¸¦ °­Á¦·Î ¹«½ÃÇÏ°í ½ÍÀº »óȲµµ ÀÖ´Ù. ¾î¿ ¼ö ¾øÀÌ ½á¾ß ÇÏ´Â ¶óÀ̺귯¸® ÄÚµå µî¿¡¼­ Ç¥ÁØ ¹®ÀÚ¿­ ÇÔ¼ö¸¦ »ç¿ëÇÑ °æ¿ì°¡ ´ëÇ¥ÀûÀÌ´Ù. ÀÌ·² ¶§ °æ°í¸¦ °­Á¦·Î ²ô±â À§Çؼ­´Â strsafe.h¸¦ Æ÷ÇÔ½ÃŰ´Â ºÎºÐ ¾Õ¿¡ STRSAFE_DEPRECATE¸¦ Á¤ÀÇÇØÁÖ¸é µÈ´Ù. ¾Æ·¡¿Í °°ÀÌ include¸¦ ½Ã۸é Ç¥ÁØ ¹®ÀÚ¿­ ÇÔ¼ö¿¡ ´ëÇÑ °æ°í°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù.

String °è¿­ÀÇ ÇÔ¼ö°¡ ¾ÈÀüÇϰí ÁÁÀº °ÍÀÓÀº »ç½ÇÀÌ´Ù. ÇÏÁö¸¸ ±âÁ¸ÀÇ ANSI C/C++ ÀÇ Ç¥ÁØ ¹®ÀÚ¿­ ÇÔ¼öµé·Î ÀÛ¼ºµÈ ÇÁ·ÎÁ§Æ®¸¦ String °è¿­ÀÇ ÇÔ¼ö·Î ±³Ã¼ÇÏ´Â ÀÛ¾÷Àº ½ÅÁßÇÏ°Ô °áÁ¤ÇØ¾ß ÇÑ´Ù. ¾ð¶æ º¸±â¿¡´Â ÇÔ¼ö¸íÀ» ¹Ù²Ù´Â °£´ÜÇÑ ÀÛ¾÷ó·³ º¸ÀÌÁö¸¸ ½Ç»óÀº ±×·¸Áö ¾Ê´Ù. ±âÁ¸ ¶óÀ̺귯¸® ÇÔ¼öµéÀ» »ç¿ëÇÏ´Â ´ëºÎºÐÀÇ ÄÚµåÀÇ °æ¿ì ÇÔ¼ö·Î Ãâ·Â ¹öÆÛÀÇ Å©±â¸¦ Àü¼ÛÇÏÁö ¾Ê±â ¶§¹®¿¡ È£ÃâÇÏ´Â Âʰú ÇÔ¼ö Äڵ带 ÀüüÀûÀ¸·Î ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ÀÌ·± ÀÌÀ¯·Î ´ëºÎºÐÀÇ °æ¿ì String°è¿­·Î Äڵ带 °íħÀ¸·Î½á ¾ò´Â º¸¾È È¿°úº¸´Ù ´õ ¸¹Àº ¹ö±×°¡ ¼öÁ¤ µµÁß¿¡ ¹ß»ýÇÑ´Ù. µû¶ó¼­ ±âÁ¸ÀÇ ÇÁ·ÎÁ§Æ® Äڵ带 º¯°æÇÏ´Â ÀÏÀº ½ÅÁßÈ÷ °ËÅäÇÑ ÈÄ °áÁ¤Çϵµ·Ï ÇÏÀÚ.

¸»Àº ¾²´Â »ç¶÷ÀÇ È¥À» ´ã´Â ±×¸©À̶ó°í ÇÑ´Ù. ÀÌ¿Í ¸¶Âù°¡Áö·Î ÄÚµå´Â ÇÁ·Î±×·¡¸ÓÀÇ È¥À» ´ã´Â ±×¸©ÀÌ µÉ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î »õ·Ó°Ô ÀÛ¼ºÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡´Â ¾ÈÀüÇÑ ¹®ÀÚ¿­ ÇÔ¼ö¸¦ ¾²°í ¹®ÀÚ¿­ Æ÷ÀÎÅͰ¡ Àü´ÞµÇ´Â °÷À¸·Î´Â Ç×»ó Å©±â¸¦ °°ÀÌ Àü´ÞÇϵµ·Ï ÇÏÀÚ. À̺¸´Ù Á» ´õ ÁÁÀº ¹æ¹ýÀº µÇµµ·Ï Á÷Á¢ÀûÀÎ ¹®ÀÚ¿­ Æ÷ÀÎÅÍÀÇ »ç¿ëÀ» ÁÙÀ̰í stringÀ̳ª CStringµîÀÇ C++ Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.