C++ 프로그램에서 strcat 코드 소스가 어떻게 되냐요?
그리고, strcat 에서는 동적 메모리 할당이일어나야 할텐데요, 여기서 동적메모리 할당을 realloc() 을 써서 나타내주실수 있나요? ㅜ
C++이든 C든 strcat의 동작은 동일하며 동적 메모리 할당은 일어나지 않습니다.
strcat을 부르는 사용자가 메모리를 충분히 확보한 다음에 불러야 하며, 그렇지 않을 경우 향후 발생하는 모든 사태에 대한 책임은 사용자에게 있습니다. -_-
확보된 메모리가 8byte인데 4byte 문자열에 strcat로 10 byte를 붙여버리면 뒤에 6byte가 overflow가 되겠죠. 위험합니다.
참고삼아.. :)
char * strcat(char *d, const char *s) { char *p = d; while (*d++) ; d--; while (*d++ = *s++) ; return p; }
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html Korean Ver: http://cinsk.github.io/cfaqs/
strcat은 스트링뒤에 덧붙이는 함수인데
char c[10] = "abc"; strcat( c, "123" );
이렇게 하면 오류가 안나지만 7자 이상을 붙있다면 메모리 침범을 하게 됩니다. 즉 할당된 버퍼안에서 스트링이 버퍼보다 짧을때 뒤에 이어 붙이는것을 의미합니다.
char *c = malloc(10); strcpy(c,"1234"); realloc( c, 20 ); strcat(c,"abcdefg");
이렇게 하면 처음에 c가 10 바이트에서 20 바이트로 공간을 늘려잡게 되는것입니다. realloc을 하게 되면 기존에 버퍼에 있었던 내용이 복사되게 됩니다(버퍼사이즈가 작은쪽 크기만큼)
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
strcat에 대해 오해하고 계십니다
C++이든 C든 strcat의 동작은 동일하며 동적 메모리 할당은 일어나지 않습니다.
strcat을 부르는 사용자가 메모리를 충분히 확보한 다음에 불러야 하며, 그렇지 않을 경우 향후 발생하는 모든 사태에 대한 책임은 사용자에게 있습니다. -_-
확보된 메모리가 8byte인데 4byte 문자열에
확보된 메모리가 8byte인데 4byte 문자열에 strcat로 10 byte를 붙여버리면
뒤에 6byte가 overflow가 되겠죠. 위험합니다.
참고삼아.. :) char * strcat(char
참고삼아.. :)
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
strcat
strcat은 스트링뒤에 덧붙이는 함수인데
char c[10] = "abc";
strcat( c, "123" );
이렇게 하면 오류가 안나지만 7자 이상을 붙있다면 메모리 침범을 하게 됩니다.
즉 할당된 버퍼안에서 스트링이 버퍼보다 짧을때 뒤에 이어 붙이는것을 의미합니다.
char *c = malloc(10);
strcpy(c,"1234");
realloc( c, 20 );
strcat(c,"abcdefg");
이렇게 하면 처음에 c가 10 바이트에서 20 바이트로 공간을 늘려잡게 되는것입니다.
realloc을 하게 되면 기존에 버퍼에 있었던 내용이 복사되게 됩니다(버퍼사이즈가 작은쪽 크기만큼)
댓글 달기