티스토리 뷰
목차
MFC, CString to Char* (문자열 변환, LPSTR, LPCTSTR)
LPSTR은 char * 형입니다. 해보면 알겠지만 char *형을 CString 형에다 넣으면 들어갑니다. 그러나 반대로는 에러가 납니다.
1. CString to char*, 이 경우에는 에러가 없습니다
1 2 | char a[100] = {"하하"}; CString b = a; | cs |
2. 이 경우에는 에러가 납니다
1 2 3 | CString b = "하하"; char a[100]; a = b; | cs |
문제 해결방법은 여러가지가 있습니다.
하지만, 이렇게 strcpy를 써서 char* 형인 a변수로 "하하"를 옮긴 다음에 a를 인자로 넘겨주면 에러가 없을것입니다.
1 2 3 | CString b ="하하"; char a[100]; strcpy(a, b); | cs |
a가 char* 형이기 때문에 (char* -> char*) 당연히 에러가없죠.
CString => char* 변환, 일반적인 CString to Char*
1 2 3 4 5 6 | char * ch; CString *str; 1) ch = (LPSTR)(LPCSTR)str; 2) ch = str.GetBuffer(str.GetLength()); 3) wsprintf( ch, "%s", str); | cs |
char* => CString 변환
1 2 | 1) str = (LPCSTR)(LPSTR)ch; 2) str = ch; | cs |
[MFC, CString to Char* (문자열 변환, LPSTR, LPCTSTR)]
참고 1)
LPSTR 은 char* 입니다. |
|
LPSTR |
char stirng의 32비트 포인터, char* 와 동일 |
LPCTSTR |
Constant character String의 32비트 포인터 |
UINT |
32비트 unsigned형 정수 |
DWORD |
unsigned long int형 |
BYTE |
8비트 unsigned 정수 |
참고 2) CString 클래스의 GetBuffer()는 CString을 char *로 바꿔줍니다
1 2 3 4 5 6 7 8 9 | ex) CString strTemp = _T("test"); char *getTemp=NULL; getTemp = malloc(strTemp.GetLength()+1); strcpy(getTemp, strTemp.GetBuffer(strTemp.GetLength()); printf("결과:%sn", getTemp); free(getTemp); | cs |
[MFC, CString to Char* (문자열 변환, LPSTR, LPCTSTR)]
참고 3) operator LPCTSTR ()도 마찬가지입니다
1 2 3 | ex) CString strTemp = _T("test"); char *getTemp = (LPSTR)(LPCSTR)strData; | cs |
MFC, CString to Char* (문자열 변환, LPSTR, LPCTSTR)