티스토리 뷰

목차

    반응형

    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];
    = 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[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 문자열 char[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)

    반응형