ÇÁ·Î±×·¡¹Ö

 3198, 1/160 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   schcp91
   [C¾ð¾î] C ¾ð¾î¿¡ ´ëÇØ¼­ Áú¹® Á» Çϰڽ¿´Ï´ç. ºÁÁÖ¶ó´É!!

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2795 [º¹»ç]


/* strcopy.c */
#include <stdio.h>

void strcopy (char *pDst, char *pSrc);

void main()
{
         char szString1[20] = "This is a String";
         char szString2[20] = { 0, };

         strcopy (szString2, szString1);

         printf("szString2 : %s \n", szString2);
}

void strcopy (char *pDst, char *pSrc)
{
         while( (*pDst++ = *pSrc++ ) != '\0' );
}

¸» ±×´ë·Î ¹®ÀÚ¿­À» º¹»çÇÏ´Â °£´ÜÇÑ ÄÚµåÀä.

ÀÌ ºÎºÐÀÌ Á» ÀÌÇØ°¡ °¥¶û ¸»¶û ÇÏ´Â µ¥.
         while( (*pDst++ = *pSrc++ ) != '\0' );
Áö±Ý ÀÌ ¹®ÀåÀº szString1ÀÇ ¹è¿­¿¡ ÀúÀåµÈ °ªµéÀÌ Çϳª Çϳª szString2·Î ´ëÀÔ È¤Àº ¿Å°ÜÁö°í ÀÖ´Â °ÍÀε¥..

(*pDst++ = *pSrc++ ) != '\0'
ÀÌ ºÎºÐÀ» ¾î¶»°Ô ÇØ¼®Çϸé ÁÁÀ» Áö.. ¸»·Î Ç®ÀÌÇØÁÖ½É °¨»çÇÔ´Ï´ç-0

(*pDst++ = *pSrc++ ) ÀÌ°Ô NULL ¹®ÀÚ°¡ µÉ ¶§±îÁö while ¹®À» ½ÇÇàÇÏ´Â °ÍÀε¥,
±¸Ã¼ÀûÀ¸·Î *pDst°¡ NULL ¹®ÀÚ°¡ ³ª¿Ã ¶§ ±îÁö ½ÇÇàÇÏ´Â °Ç°¡¿ä? Âü ÇØ¼®Çϱ⠳­°¨Çϳ׿ä.
(*pDst++ = *pSrc++ ) ÀÌ°Í ÀÚü°¡ ¾î¶»°Ô NULLÀÌ µÇ¶ó´Â °ÇÁö..

Á¦ °³ÀÎÀûÀÎ »ý°¢À¸·Î´Â,
szString1ÀÇ "This is a String"¿¡¼­ ¸¶Áö¸· ¹®ÀÚ g±îÁö szString2¿¡ ´ëÀÔµÈ ÈÄ, °ø¹é ¹®ÀÚ('\0')°¡ ¾Æ¸¶ szString2¿¡ ´ëÀԵǰÚÁÒ? ¿Ö³Ä¸é ¹è¿­ÀÇ ¸¶Áö¸·Àº Ç×»ó NULL ¹®ÀÚ°¡ Æ÷ÇԵǴϱî¿ä. µû¶ó¼­, szString1ÀÇ ¸¶Áö¸· NULL ¹®ÀÚ°¡ szString2·Î ¿Å°ÜÁö´Â °Å±¸¿ä. ±×ÃÝ????? ¾²´Ùº¸´Ï ÀÌ°Ô ¸Â´Â °Í °°Àºµ¥..
ÇÏ¿©Æ° ±× ¶§, while¹®ÀÌ Á¾·á µÇ´Â °ÍÀ̶ó°í Àú´Â »ý°¢Çϴµ¥.

ÇØÄ¿½ºÄð ºÐµéÀº ÀßÇϽôϱî. ('´ÔµéÀº'À̶ó°í ¾²¸é ºñÁ¤»óÀûÀÎ Åë½Å¾îü¶ó¼­ »ç¿ëÇÏÁö ¸»¶ó°í µÇ¾îÀֳ׿°-)
Á¦ ¸·¿¬ÇÑ »ý°¢. »½ ¶Õ¸®°Ô µµ¿ÍÁÖ»ï.
´ëÇÐ °¡±âÀü¿¡ È¥ÀÚ °øºÎÇÏ´Â °Å¶ó, µµ¿ò ÁÙ »ç¶÷µéÀÌ ¿©±â ¹Û¿¡ ¾ø³×¿µ ¤»¤»


  Hit : 4422     Date : 2010/12/08 01:42



    
hideroot ±× °³ÀÎÀûÀÎ »ý°¢ÀÌ Á¤È®È÷ ¸Â½À´Ï´Ù. 2010/12/08  
schcp91 Á¤¸» °¨»çµå¸³´Ï´Ù....¿ìÈÄ~ -0 2010/12/08  
µÎ·ç¹¶¼ú ³ÎÀ϶§±îÁö pSrcÀÇ ¹®ÀÚ¿­À» pDst ·Î ³Ö¾îÁÖ°í Çѹø¾¿ Áõ°¡½ÃŰ³×¿ä º¹»çÇÏ´Â ÄÚµåµéÁß¿¡ Á¦ÀÏ °£°áÇØº¸¿©¿ä ¤»¤» 2010/12/08  
schcp91 ¿ÁÒ ¹¹ ¤»¤»¤»¤»¤»
ÇÁ·Î±×·¡¹Ö¶õ°Ô Âü ½Å±âÇϳ׿° ¤»¤»
2010/12/08  
CodeAche °á±¹¿£
(*pDst++ = *pSrc++ )
À̱¸¹®¿¡¼­ pDst ¿Í '\0' (0) ¸¸ °¡Áö°í °Ë»çÇÕ´Ï´Ù.
¾îÂ÷ÇÇ pDst¿¡´Â pSrcÀÇ µ¥ÀÌÅͰ¡ À̵¿µÇ´Ï ´ç¿¬ÇѰŰÚÁö¸¸¿ä.
¾Æ·¡ µð¹ö±ë °á°ú¸¦ º¸¸é ´õ È®½ÇÈ÷ ¾Ë ¼ö ÀÖ½À´Ï´Ù.

0x0804844b <strcopy+3>: mov 0xc(%ebp),%eax ebp+0c == pSrc
0x0804844e <strcopy+6>: movzbl (%eax),%edx edx = *pSrc

0x08048451 <strcopy+9>: mov 0x8(%ebp),%eax ebp+8 == pDst
0x08048454 <strcopy+12>: mov %dl,(%eax) *pDst = *pSrc

0x08048456 <strcopy+14>: mov 0x8(%ebp),%eax
0x08048459 <strcopy+17>: movzbl (%eax),%eax
0x0804845c <strcopy+20>: test %al,%al *pDst != '\0'
0x0804845e <strcopy+22>: setne %al set not equal
0x08048461 <strcopy+25>: addl $0x1,0x8(%ebp) pDst++
0x08048465 <strcopy+29>: addl $0x1,0xc(%ebp) pSrc++
0x08048469 <strcopy+33>: test %al,%al setne¿¡ ÀÇÇÑ set °Ë»ç
0x0804846b <strcopy+35>: jne 0x804844b <strcopy+3>

2010/12/08  
schcp91 ±×·¸ÁÒ?? µ¥ÀÌÅͰ¡ À̵¿µÇ´Â °Å´Ï±î~!
À¸À½..~
±Ùµ¥ µð¹ö±ëÀº............ À½~?
Á» ¹è¿ö¾ß °Ú³×¿ä -0 ¤»¤»¤»¤»¤»¤»¤»¤»
±Ùµ¥ *pDst != '\0' ¶ó°í µÇ¾îÀÖ´Â °É º¸´Ï
¹» ¸»ÇÏ´Â Áö´Â ¾Ë µí-0
µð°Ô °¨»ç!!!
2010/12/08