[MFC] LPSTR LPCTSTR 위험 CString -> char 으로 변환
- 카테고리 없음
- 2017. 5. 4. 10:37
반응형
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) |
반응형
이 글을 공유하기