char dest[20];
  char *sour = "Ciba";
  strcpy(dest, sour);

  cout<<dest<<endl;
  요건 된다.

  그렇다면
  char *dest = 0;
  char *sour = "Ciba";
  strcpy(dest, sour);

  cout<<dest<<endl;
  요건 될까?
  
  dest에 저장해야할 공간이 있어야 한다.
  결과는 에러이다. dest는 char 형의 포인터이지 sour을 담을 공간이 없는 것이다.

  이경우 포인터를 사용하고 싶다면
  char *dest=0;
  dest = new char[strlen(sour)];
  strcpy(dest,sour);
  이렇게 저장할 공간을 할당해야 한다.    


  여기까지는 기본이다.
  그럼 욘니 헷갈리는 윈도우 문자형들
  1. LPSTR
   이것의 정의는
   #define char* LPSTR
  
  그렇다면 위의 코드를 변경하면
  LPSTR dest  = 0;
  LPSTR sour  = "Ciba";
  dest = new char[strlen(sour)];
  strcpy(dest, sour);
  이렇게 하면 된다.
  어떤가 코드가 좀 깔끔하게 보이지?
  
2. LPTSTR
  이것의 msdn api정의를 보믄
  LPTSTR An LPWSTR if UNICODE is defined, an LPSTR otherwise
  요렇게 되있다..
  유니코드가 정의되어 있으믄      => LPTSTR 은 LPWSTR로
  유니코드가 정의되어 있지 않으믄 => LPTSTR 은 LPSTR로
  여기서 유니코드란게 몬가믄
  msdn 에서
  Unicode and Character Sets
  Microsoft Windows provides support for the many different written languages of the   international marketplace through Unicode and traditional character sets. Unicode is a   worldwide character-encoding standard that uses 16-bit code values to represent all the   characters used in modern computing, including technical symbols and special characters     used in publishing. Traditional character sets are the previous character-encoding   standardssuch as the Windows ANSI character setthat use 8-bit code values or combinations   of 8-bit values to represent the characters used in a specific language or geographical   region.

  This overview describes the character set functions and explains how to use them in your   applications.


   출처:     http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_6bqr.asp
  
   해석을 하믄(성재으 해석을 믿지 말장!!)
   유니코드와 문자 집합
   마이구라 소프트 윈도우즈는 유니코드와 전통적은 문자 집합을 통해 세계적인 시장들에서
   여러가지로 쓰여진 언어들을 지원한당(세계적인 시장의 의미는 아프리카 가튼 열쇠적
   시장은 신경쓰지 않는다는 의미것지) 유니코드는 기술적인 기호나 출판에 사용되는 특정
   문자들을 포함하는, 현대 컴퓨팅에서 사용되는 모든 문자들을 표현하기하기 위해 16비트 코드
   값을 사용하는 확장된 문자 엔코딩 기준이당. 전통적인 문자 집힙들은 8비트 코드값을
   사용하거나 특정 언어나 지역에서 사용되는 문자를 표현하기위한 8비트 값의 조합을 이용하는
   윈도우 에이쓰벌 문자 집합인 구식의 문자 엔코딩이당.

   다시 돌아와서
   즉 유니코드는 국제화를 위해서 8비트 안시의 한계를 극복하기 위해 16비트로 확장하여
   한글, 한자, 가다가나등을 표현할 수 있게 엠에쑤의 시츄에이션이라 할 수 있것다.
   만약에 프로그램을 이웃나라로 수출한다면 유니코드는 필수이다.
   그렇지만 현재 프로그램에서는 옵션이다. 걍 있으면 좋은거란 예기당.
   즉 LPTSTR이 LPWSTR로 바뀌든 LPSTR로 바뀌든 지금 프로그램에서는 큰 문제는 아니다.

   코드또한 이케 바뀐다.

   LPTSTR dest  = 0;
   LPTSTR sour  = "Ciba";
   dest = new char[strlen(sour)];
   strcpy(dest, sour);

   cout<<dest<<endl;
Posted by 김용환 '김용환'

댓글을 달아 주세요