13. 문자열

  1. 문자
  2. 문자열



1. 문자

문자는 정수형 자료형으로, 주로 1바이트 자료형인 char 과 2바이트 자료형인 wchar_t 에 저장된다.

문자 변수 안의 값을 실제로 확인하면 사용자가 할당한 문자가 아닌 숫자가 저장되어 있는데, 이는 아스키 코드에 따라 문자에 대응되는 정수를 변수에 저장하는 것이다.

예를 들어, 문자 a 의 경우 정수 97 로 저장되며, 문자로써 1 을 입력하면 정수 49 가 저장된다.

여기서 알 수 있듯이, 문자로서의 1과 숫자로써의 1 은 컴퓨터는 다르게 저장한다.


ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호)

alt text


아스키 코드 표는 1바이트 자료형인 char 타입에 해당되며, 2바이트 자료형 wchar_t 은 영어 뿐만 아니라 한글 등의 더 다양한 문자를 저장하기 위해 확장되어 표준 테이블이 다양하다.

한글을 예로 들면, 한글은 각 문자마다 모두 코드가 매핑되어 있는데, 이 조합이 굉장히 많아 1바이트로 표현할 수 없다.

이 문제를 해결하기 위해 2바이트로 표현하는데, 1바이트 정수 자료형 char 에서는 2바이트를 1바이트씩 나누어 저장하게 된다.

또한, 2바이트 문자는 1바이트 문자와 구분하기 위해 문자 또는 문자열 앞에 L을 붙여 L(문자열) 의 형태로 구분해 입력한다.




2. 문자열

문자는 문자 변수가 배열처럼 메모리상에 연속적으로 나열되어 있는 형태로 저장된다.

이 때, 문자열의 끝은 반드시 NULL 문자가 들어가서 문자열의 끝임을 알린다.



char c = 'A';
wchar_t wstr[10] = L"abcdef";	// 배열 복사
const wchar_t* pwc = L"abcdef";	// 문자열 시작 주소 할당


문자와 문자열의 입력은 각각 작은 따옴표(‘’) 와 큰 따옴표(“”) 으로 구분된다.

또한, 문자열은 문자 자료형 배열에 초기화를 배열 요소의 나열처럼 입력이 가능하며, 마지막 NULL 문자까지 포함시켜야 하므로 L"abcdef" 문자열의 경우 7개 이상의 공간을 가진 2바이트 자료형 문자의 배열에 저장될 수 있다.

또한 문자열은 const 포인터에 할당할 수도 있다. 문자열은 실제로 ROM에 있는 문자로 이루어진 배열이다. 두번째 줄은 읽기 전용 메모리의 문자 배열을 복사해서 할당하는 것이고, 세번째 줄의 포인터 pwc 는 읽기 전용 메모리에 존재하는 문자 배열의 시작 주소를 가리키고 있는 것이다.

그래서 수정이 불가능하고 참조만 가능하기에 const 포인터에만 할당이 가능하다.