문자는 1byte인데 printf("%d", sizeof'김'); 에서 4가 출력되는 이유
그리고 printf("%d", sizeof ___); 뭐라쳐야 1로 출력되는지 알려주세요
위 코드를 실행하면 아래와 같이 나타납니다.
마지막을 보면 %c로 처리했을 때 글자가 깨진 것을 알 수 있습니다.
'김'이란 글자를 하나의 char 문자로 보고 작은 따옴표에 넣었습니다.
그러나 한글 한 글자는 2byte를 사용합니다. unsigned char로 한 바이트씩 읽으면 한글을 읽었을 때
그 값이 128 이상인 값으로 나옵니다.
ascii 코드는 통신을 위해 첫 비트를 원래 사용하지 않지만 통신이 아닌 컴퓨터 내부에서는
첫 비트를 확장문자를 위해 사용합니다.
즉, unsigned char의 128 이상의 값에는 확장 코드가 들어있습니다.
한글은 바로 그 확장코드에 들어있는데, 두 byte를 하나의 한글 코드로 사용합니다.
따라서 한글 한 글자는 하나의 char가 아니라 문자열로 사용해야 합니다. 당연히 큰 따옴표로 감싸야 합니다.
문자열로 사용하는 만큼 끝에 null 문자가 들어가야 합니다.
즉, 한글 한 글자만 사용해도 3byte의 문자열로 표현해야 합니다.
char hangul[3] = "김";
두 바이트는 "김"이라는 글자가 차지하고 나머지 한 바이트는 널문자가 들어가게 됩니다.
위를 보면 작은 따옴표로 감쌌는데 4byte로 나왔습니다.
char 문자도 컴퓨터 내부에서 처리할 때는 int로 연산을 수행합니다.
아마도 그런 연유로 1byte로 처리 불가하니 4byte로 나온 것 같습니다.
16bit 시스템(운영체제)에서는 2byte로 나올 수도 있을 것 같습니다.