본문 바로가기
Software/C++&MFC

문자열 상호 형변환, char* ↔ std::string ↔ CString ↔ std::stringstream

by lovey25 2019. 10. 22.
반응형

문자열간 형변환 방법입니다. 워낙 많이 쓰이기 때문에 자료가 많긴하지만 매번 찾아보는것도 귀찮아서 정리했습니다. 

char* ↔ std::string

char* to string

#include <string>

char c[256] = "Hi there";
std::string str(c);  // OR std::string str = c;

 

string to char*

#include <string>

std::string str = "Hi there";
const char* c = str.c_str();

string 을 char* 로 변환하기 위해서는 const char*을 사용해야 함. 이경우 당연히 수정이 불가능

수정가능한 문자열로 만들고 싶을때는 동적할당을 통한 메모리 복사를 해야함

#include <string>

std::string str = "Hi there";
char* c = new char[str.size()+1];
std::copy(str.begin(), str.end(), c);
c[str.size()] = '\0';
delete[] c;

동적할당한 char* c 변수는 할당한 문자열 갯수가 str 문자열의 갯수보다 1개 더 많게 할당해서 Null종료 문자를 위한 공간을 확보

사용이 완료된 후에는 반드시 메모리 해제를 해주어야 하는 불편함이 있음. 이런 불편을 피하기 위해서 다음의 방법을 사용할 수도 있음

#include <string>
#include <vector>

std::string str = "Hi there";
std:vector<char> vc(str.begin(), str.end());
vc.puch_back('\0');

char* c = &*vc.begin();  // OR char* c = &vc[0];

메모리 할당 크기와 해제는 신경쓰지 않아도 되지만 문자열 마지막에 Null 종료문자 넣는걸 기억할 것.

 

CString

char* to CString

char c[256] = "Hi there";
CString cstr;
cstr = c;

char 는 직접 할당이 가능한데, CString에서 = 연산자 오버로딩으로 메모리 복사를 처리해 준다고 함.

string to CString

#include <string>

std:string str;
CString cstr(str.c_str());

 

CString to string

#include <string>

CString cstr(_T("Hi there~"));
std::string str = CT2CA(cstr);  // OR std::string std(cstr, cstr.GetLength());

 

std::stringstream

stringstream to string

#include <string>
#include <sstream>

std::stringstream ss;
ss << "Hi there~" << std::endl;
std:string str = ss.str();

 

끝!

반응형

댓글