|
바봉 님이 쓰신 글 :
: 안녕하세요.
:
: string 의 c_str() 을 호출하면 리턴값으로 char* 가 넘어오잖아요..
:
: 그렇다면 넘어온 스트링을 다 사용하고 나면 free 해줘야 하는거 아닌가염?
:
: 아니라면 어떻게 그렇게 되는 것이죠?
:
: 도움말 부탁드려여...
string::c_str()은 string 내부에 있는 문자열의 '읽기 전용' 사본(read-only copy)을 가리키는
포인터를 리턴합니다.
이 포인터를 가리키는 메모리는 사용자가 해제(free 또는 delete로)하는 게 아니라.
string의 소멸자 ~string()에서 알아서 해제하는 겁니다.
이 포인터가 가리키는 char 배열은 '읽기 전용'이라는 사실에 유의하세요.
수정하려면 정적이나 동적인 char 배열에 strcpy()등으로 복사하신 다음에 해야합니다.
예를 들면,
std::string sTest = "Hello, World!";
puts(sTest.c_str());
이와 같이 읽기만 한다면, 위와 같이 간단히 되고요,
수정하려면 다음과 같이 복사합니다.
char szTest[MAX_LEN + 1];
strcpy(szTest, sTest.c_str());
또는
char pszTest = new char[sTest.length() + 1]
strcpy(pszTest, sTest.c_str());
// 사용후엔 반드시 메모리 해제
delete[] pszTest;
또는
char pszTest = strdup(sTest.c_str());
// 사용후엔 반드시 메모리 해제
free(pszTest);
로 해야한다는 얘기입니다.
|