본문 바로가기
공부/C, C++

[C] 문자열, wchar_t

by 김샤랑 2022. 1. 9.

[C] 문자열, wchar_t


- 차이 이해

wchar_t szWChar[10] = L"abcdef"; 

const wchar_t* pChar = L"abcdef";

 

이 두 구문의 차이를 이해할 수 있어야 한다.

차이점에 대해 한번 생각해보자.

 


- wchar_t 이란?

wchar_t는 wide character(와이드 문자)를 저장하기 위한 2바이트 자료형이다.

wchar_t 문자와 문자열은 앞에 L을 붙여 표현한다.

문자열의 요소 한 칸당 2바이트를 차지한다는 뜻이다.

문자열은 주소 값을 뜻한다. 그렇기 때문에 포인트로도 갈 수 있다.

 

wchar_t 문자열은 w가 붙은 함수를 사용한다.  -> #include <wchar.h> 헤더 파일 추가

 


- 왜 지금 wchar_t를 쓰고 있는가?

char은 멀티 바이트로 가변 길이다. 호환성 문제로 잘 쓰이진 않음. 

보통 영문 알파벳은 1바이트인데, 한국어 같은 유니코드는 2바이트 이상으로 표현하기 때문에 wchar_t 애 저장해야 한다.

 

어쩔 땐 1바이트이고 어쩔 땐 2바이트로 하니까 혼재되어 있을 경우,
내가 체크하는 문자가 몇개인지 바이트 수로 세면 틀릴 수 있다..

 

 -> 앞으로 와이드 바이트인 wchar_t 사용 예정(2바이트 기준).

 


- wchar_t szWChar[10] = L"abcdef"; 

문자열에 있는 abcdef 의 배열을 swzWChar에 옮겨 넣는다. 는 뜻이다.

 


- const wchar_t* pChar = L"abcdef"; 

문자열 abcdef가 있는 곳의 시작 주소 값을 바로 가리킨다. 는 뜻이다.

 


szWChar[2] = 'z';  

// pChar[1] = 'z';

 

이 두개의 뜻도 완전히 다르다. 

첫 번째 구문은 szWchar의 b를 z로 바꾸겠다 이고

두 번째 구문은 *(pChar+1) = 'z'; 와 같은 뜻으로 가리키고 있는 배열의 b를 z로 바꾸겠다는 뜻이다. 

 

참조하는 곳을 직접적으로 값을 바꾸는 것을 방지하기 위해 const를 앞에 붙인다.

const를 까먹더라도 애초에 문자열은 const 타입 반환을 하도록 되어 있어 에러가 생긴다. (주석을 친 이유)

문자열의 주소를 포인트로 받아서 쓸 때는 읽기 전용 코드이기 때문에 수정하면 안 되기 때문에 중요하다. 

 

 


 

 

 

'공부 > C, C++' 카테고리의 다른 글

[C] 구조체 포인터  (0) 2022.01.10
[C] wchar_t 함수 ( wcslen( ), wcscat_s( ) )  (0) 2022.01.09
[C] const 와 포인터  (0) 2022.01.04
[C] const, const 값 바꾸기  (0) 2022.01.04
[C] 포인터 Pointer  (0) 2022.01.03

댓글