반응형

[MFC] LPSTR LPCTSTR 위험 CString -> char 으로 변환

반응형


MFC 개발을 하는 도중, 좋은 글이 있어 정리해보았습니다.


보통 CString에서 내부 데이터를 가져올 때, 

CString strPP;
char * chNN = (LPSTR)(LPCSTR)strPP;

이렇게 해서 chNN을 CString의 포인터로 가져 옵니다. 즉 CString의 내부 데이터에 접근하게 되는 거죠.


하지만 이러한 처리가 위험한 이유는 CString이 제공하는 것은 const가 붙은 형변환 밖에 없는데, 이걸 const를 억지로 빼버리고 접근할 경우 잘못 사용하면 큰 오류를 일으킬 가능성이 크다고 합니다.


왜냐하면 const변환은 이 데이터의 주소를 받는 쪽에서 이 데이터를 안 고친다고 보고 CString의 내부 메모리주소를 보여주는 것인데, 이 전제 조건을 어기고 write를 하게되면 에러가 발생한다고 합니다. 


대신, 다음과 같은 처리를 하는 것을 통해 데이터에 접근하는 것이 더 안전하다고 합니다.

char* cTest;
CString csTest = "사나이로 태어나서 할일은 사랑하기";
cTest = csTest.GetBuffer(0);                //GetBuffer(0): csTest가 가지고 있는 문자열의 만큼 가지고 온다는 의미
AfxMessageBox(cTest)


참고자료 : http://blog.daum.net/sjdody/5693925

반응형

이 글을 공유하기

댓글

Designed by JB FACTORY