Character Sets의 종류와 특성
SBCS(single byte character set)
- 1바이트만을 사용하는 방식
- 아스키코드가 대표적인 SBCS에 해당
MBCS(multi byte character set)
- 어떤 문자는 1바이트로 표현하며, 어떤 문자는 2바이트로 표현
- 유니코드는 MBCS에 속하지 않음.(MBCS는 SBCS를 포함한다.)
- 효율적으로 보이지만, 프로그램을 구현하는데 세심한 주의가 필요
WBCS(wode byte charater set)
- 2바이트만을 사용하는 방식
- 유니코드가 대표적인 WBCS에 해당
간단한 예제 코드
배열의 크기 : ABC(3) + 한글(4) + NULL(1) = 8Byte
문자열 길이 : ABC(3) + 한글(4) = 7
5가 아니라 7이 나왔다. 곧 한글은 2글자가 아니라 4글자로 인식되었다는 것을 확인 할 수 있는데. 이는 MBCS에 최대 단점 중 하나이다.
WBCS예제
char 대신 wchar_t사용. char는 1바이트, wchar_t형은 2바이트 메모리 공간이 할당된다wchar_t 변수는 변수값을 입력할 때 문자열 앞에 'L'을 붙여 줘야 한다.

' L"ABC" '로 인자에 넣어줬기 때문에 2byte씩 할당되며, 'ABC\n' = 8byte가 할당된다.
문자열 길이는 'ABC' = 3이 나온다.
문자열 조작하는 SBCS함수 . WBCS 함수
- strlen , size_t wcslen (const wchar_t* string);
- strcpy , wchar_t wcscpy (wchar_t* dest, const wchar_t* src);
- strncpy , wchar_t* wcsncpy (wchar_t* dest, const wchar_t* src, size_t cnt);
- strcat , wchar_t* wcscat(wchar_t* dest. const wchar_t* src);
- strncat , wchar_t* wcsncat(wchar_t* dest, const wchar_t* src, sizr_t cnt);
- strcmp , int wcscmp (const wchar_t* s1, const wchar_t* s2);
- strncmp , int wcsncmp (const wchar_t* s1, const wchar_t* s2, size_t cnt);
문자열 입.출력 함수 SBCS 기반, WBCS 기반
- printf , int wprintf (const wchar_t* format [, argument]...);
- scanf , int wscanf (const wchar_t* format [,argument]...);
- fgets , wchar_t* fgetws (wchar_t* string, int n, FILE* stream);
- fputs int fputws (const wchar_t* string, FILE* stream);
main과 wmain에 차이 정리
wmain을 사용하면 문자열 앞에 "L"이 입력된다. 곧 유니코드를 사용하기 위해 직접 L을 넣어줄 필요가 없다.
댓글 없음:
댓글 쓰기