이번에는 CString 형에서 char*형으로 변환하는 방법을 알아보자. 고 생각했는데,
다른 블로거께서 딱히 설명 할 필요 없을정도로 아주 자세히 설명해놓으셔서 따로 부가적인 코멘트가 없어도 될듯하다.
1. 일반 문자열의 형변환
CString strImagePath = "Normal Method";
char *szLoadImagePath = new char[strImagePath.GetLength() + 1];
sprintf(szLoadImagePath, "%s", strImagePath.GetBuffer());
...
delete []szLoadImagePath;
2. 경로를 입력해주는 경우의 형변환
CString strImagePath = "C:\\ProgramFiles\\Image\\image.bmp";
char *szLoadImagePath = new char[strImagePath.GetLength() + 1];
sprintf(szLoadImagePath, "%s", strImagePath.GetBuffer());
...
delete []szLoadImagePath;
3. 함수로부터 경로를 넘겨받는 경우의 형변환
CString strImagePath = m_img.GetImagePath();
strImagePath += "image.bmp";
char szLoadImagePath[256];
wcstombs(szLoadImagePath, (LPCTSTR)strImagePath, 256);
일반적인 CString 문자열을 char* 형으로 형변환하고자 한다면 1번 방법을 사용하시면 됩니다. 개발자 코드에서
경로를 직접 입력해줄 경우에는 2번 방법을 사용하시면 됩니다. 하지만, 별도의 함수로부터 경로를 넘겨받을 경우에는
\를 Escape Sequence로 인식하기 때문에 경로를 올바르게 인식하지 않습니다. 그렇다고 일일이 \을 \\으로 변경할 수도
없으므로 3번 방법을 사용하시면 됩니다. wcstombs 함수는 UNICODE 문자열(WCS, Wide Character Set)을 ASCII 문자열(MBCS,
Multy Byte Character Set)로 변환시켜주는 함수 입니다. 이렇게 하면 \을 Escape Sequence로 인식하는 문제를 피할 수 있습니다.
하지만 3번 방법도 경로에 한글이 포함되어 있을 경우 올바르게 인식하지 않습니다. 비로소 4번 방법을 사용하였을 경우 1,2,3번
방법에서 나타났던 문제를 모두 해결할 수 있습니다.
4. 경로에 한글이 포함되어 있을 경우의 형변환
CString strImagePAth = m_img.GetImagePath();
strImagePath += "image.bmp";
char szLoadImagePath[256];
WideCharToMultiByte(CP_ACP, 0, strImagePath.GetBuffer(), -1, szLoadImagePath, 256, NULL, NULL);
참고로 저같은 경우에는 한글 Windows 8.1 OS를 사용 중인데, 경로중에 한글이 들어가게 되어있다. 그래서 4번을 활용하여 경로찾는 문제를 해결 할 수 있었다.
참고 : http://jsgreatnom.tistory.com/65
2014/10/31 - [[ Topics ]/Visual Studio] - CString to int, int to CString 변환법
2014/05/01 - [[ Topics ]/Visual Studio] - CString 에서 경로, 파일명, 확장자를 구분하여 출력하는법
2014/04/08 - [[ Topics ]/C/C++] - 문자타입간의 데이터 복사방법(wchar_t, char*, LPCTSTR)
'[ Topics ] > Visual Studio' 카테고리의 다른 글
Visual studio 2015 설치 및 C++ 프로젝트 생성 (4) | 2016.10.24 |
---|---|
MFC CFileDialog 클래스 활용방법 (0) | 2015.06.10 |
파일 입출력에서 폴더창 열기 (0) | 2015.06.10 |
MFC 다이얼로그 창 종료방법 (2) | 2015.06.10 |
MFC 다이얼로그 창 Enter, Esc키 종료 막기 (0) | 2015.06.10 |