발생 원인
해당 에러는 유니코드와 멀티바이트의 차이로 인해 발생하는 에러이다.
먼저 배경을 설명하자면, 대표적인 ASCII 코드의 경우 1Byte의 크기를 차지한다. 하지만 ASCII 코드만으로 다른 문자 체계를 전부 표현할 수 없다는 한계가 있다. 이로 인해 2Byte 문자 집합의 구성이 필요해졌으며 멀티 바이트를 2Byte 문자 집합으로 구성하고 ISO-2200에 멀티바이트로 정의하게 되었다.
멀티바이트는 유니코드와 같이 2Byte 이상의 문자 집합이나, 표준으로서 합의가 이루어지지 않은 윈도우에서 개발된 코드이기 때문에 차이가 있게 된다. 이에 따라 기본적으로 Visual Studio에서 개발 시 유니코드를 사용할 것인지 멀티바이트를 사용할 것인지에 대한 기본 값을 설정한 뒤 개발을 진행해야 한다.
유니코드 문자열을 사용하려면 문자열에 L을 붙여 사용하면 된다.
ex) 유니코드 : (L"Hello World")
ex) 멀티바이트 : ("Hello World")
유니코드로 개발된 프로그램을 멀티바이트로 포팅하려면 위와 같은 표현을 모두 수정해주어야 하는 불편함이 따른다. 이를 해결하기 위해 _T 매크로라는 것이 사용되며, 문자열을 따옴표로 감싼 뒤 유니코드에서 사용한 L 대신 _T를 사용하면 매크로가 알아서 개발 환경에 맞게 번형되어 컴파일 될 수 있도록 한다.
해결 순서
1. [프로젝트] → [속성]
2. [구성 속성] → [고급] → [문자 집합] → [멀티바이트 문자 집합 사용]
3. 해결
'Interest > 기타' 카테고리의 다른 글
[Windows Programming] HWND, HINSTANCE, HDC (0) | 2020.03.18 |
---|---|
VI 기능 단축키 (0) | 2020.03.18 |
[C++ 프로그래밍] 생성자와 소멸자(Constructor and Destructor) (0) | 2020.03.16 |
[C++ 프로그래밍] Const 함수 (0) | 2020.03.16 |
[C++ 프로그래밍] 정보은닉과 캡슐화 (0) | 2020.03.16 |