문자열의 버퍼를 얼마나 할당할지 어떻게 알죠?

kuaaan의 이미지

스트링 중 원하는 부분을 replace하는 함수를 짜려고 합니다.

버퍼를 할당하여 거기에 저장해서 리턴하려고 하는데...

도대체 버퍼 사이즈를 어떻게 정하죠?

char* replaceStr(char* strSrc,const char* strFrom, const char* strTo, int sizeofStrSrc = 5000 )
{
   char* strBuf = new char[sizeofStrSrc]; // -->> 이부분!!
   char* curFrom = strSrc;
   char* curTo = strSrc;

   bzero(strBuf, sizeofStr);

   if(curTo = strstr(curFrom, strFrom))
   {
      while(curTo)
      {
         strncat(strBuf, curFrom, curTo - curFrom);
         strncat(strBuf, strTo, strlen(strTo));
         curFrom = curTo + strlen(strFrom);
         curTo = strstr(curFrom, strFrom);
      }
      strncat(strBuf, curFrom, sizeofStr);
   } else {
      strncpy(strBuf, strSrc, sizeofStr);
   }

   return strBuf;
}

처음부분에...
char* strBuf = new char[sizeofStrSrc]; // -->> 이부분!!

여기서.. strBuf의 사이즈를 어떻게 할당해야 하나요?

(지금 sizeofStr이라고 된 부분...)

고수님들의 조언 부탁드립니다... 꾸벅...

doldori의 이미지

처음부터 버퍼 크기를 알 수는 없죠. 바꾸려는 문자열이 발견될 때마다 치환 후의
길이를 계산해서 현재 할당된 메모리가 치환 후의 길이보다 작으면 realloc()으로
늘려나가는 방식이 있겠는데, 실제로 코딩하려면 좀 귀찮습니다. char* 보다
std::string을 쓰면 무척 간편하게 할 수 있습니다.

void replaceStr(string& strSrc, const string& strFrom, const string& strTo) 
{ 
    string::size_type pos = 0;
    while ((pos = strSrc.find(strFrom, pos)) != string::npos)
        strSrc.replace(pos, strFrom.size(), strTo);
}
kuaaan의 이미지

감사합니다. 꾸벅...

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------