c++프로그램에서 realloc 을 어떻게 써야하나요?

domangan의 이미지

C++ 프로그램에서 strcat 코드 소스가 어떻게 되냐요?

그리고, strcat 에서는 동적 메모리 할당이일어나야 할텐데요, 여기서 동적메모리 할당을 realloc() 을 써서 나타내주실수 있나요? ㅜ

jick의 이미지

C++이든 C든 strcat의 동작은 동일하며 동적 메모리 할당은 일어나지 않습니다.

strcat을 부르는 사용자가 메모리를 충분히 확보한 다음에 불러야 하며, 그렇지 않을 경우 향후 발생하는 모든 사태에 대한 책임은 사용자에게 있습니다. -_-

yundorri의 이미지

확보된 메모리가 8byte인데 4byte 문자열에 strcat로 10 byte를 붙여버리면
뒤에 6byte가 overflow가 되겠죠. 위험합니다.

cinsk의 이미지

참고삼아.. :)

char *
strcat(char *d, const char *s)
{
  char *p = d;
  while (*d++)
    ;
  d--;
  while (*d++ = *s++)
    ;
  return p;
}

popome의 이미지

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을 하게 되면 기존에 버퍼에 있었던 내용이 복사되게 됩니다(버퍼사이즈가 작은쪽 크기만큼)