반응형
문자열간 형변환 방법입니다. 워낙 많이 쓰이기 때문에 자료가 많긴하지만 매번 찾아보는것도 귀찮아서 정리했습니다.
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();
끝!
반응형
'Software > C++&MFC' 카테고리의 다른 글
프로세스 이름으로 PID 번호 구하기 (0) | 2021.08.18 |
---|---|
inline 함수 (0) | 2021.04.16 |
[라이브러리] C++ 라이브러리, Boost 빌드하고 사용하기 (0) | 2019.10.08 |
MFC그래프 라이브러리, ChartCtrl 마우스 휠 기능 추가 (0) | 2019.10.07 |
댓글