MULTIBYTE(3)

명칭
mblen, mbstowcs, mbtowc, wcstombs, wctomb - C 언어의 멀티 바이트 캐릭터 서포트

프로그램 라이브러리
libc

서식
<stdlib.h> int mblen(const char *mbchar, size_t nbytes) size_t mbstowcs(wchar_t *wcstring, const char *mbstring, size_t nwchars) int mbtowc(wchar_t *wcharp, const char *mbchar, size_t nbytes) size_t wcstombs(char *mbstring, const wchar_t *wcstring, size_t nbytes) int wctomb(char *mbchar, wchar_t wchar)

해설
중국어와 같은 자연 언어의 기본 요소는, C 언어의 chars 형태 하나에서는 일의에 표현할 수 없습니다. 표준 C 언어 표준에서는, 와이드 캐릭터와 멀티 바이트 캐릭터라고 하는, 자연 언어의 encode 방법의 확장을 취급하는 2 개(살)이 다를 방법이 서포트되고 있습니다. 와이드 캐릭터는, 기본 요소 하나 하나를 wchar_t 형태의 단일 오브젝트에 MAP 할 수 있는 것 같은 내부 표현입니다. 멀티 바이트 캐릭터는 입출력에 사용되어 C 언어의 chars 형태의 줄로서 기본 요소 하나 하나를 코드화합니다. 멀티 바이트 캐릭터에서는, 개개의 기본 요소는 1 바이트 또는 그 이상(최대 MB_CHAR_MAX 바이트 )에 MAP 됩니다.

현재의 로케일 (setlocale(3)) 에 의해 와이드 캐릭터와 멀티 바이트 캐릭터의 어디에서 해석할지가 결정됩니다. 로케일 카테고리 LC_CTYPE 의 지정에 의해 이 해석을 제어합니다. 형 wchar_t (은)는, 와이드 캐릭터를 표현하는 것에 즈음해, 모든 로케일에 대해서 최대의 값을 수용 가능한 한의 충분한 크기를 가집니다.

멀티 바이트 캐릭터 라인에는, 주어진 표현중에서 규정되는 모드간의 변환을하기 위한 ‘쉬프트’ 지시자가 포함되는 일이 있습니다. 명시적으로 쉬프트의 발생을 나타내는 바이트열을 사용하면(자), 이러한 아르바이트는 다른 캐릭터라고는 보이지 못하고 , 그것과 인접하는 캐릭터와 함께 정리합니다. ‘초기’ 쉬프트 상태는 구별되어, 항상 존재하고 있습니다. 함수 mbstowcs() (와)과 wcstombs() (은)는, 멀티 바이트 캐릭터 라인이 초기 쉬프트 상태로부터 시작되어 해석되면(자) 가정합니다. 함수 mblen(), mbtowc(), wctomb() (은)는, 내부에서 정적으로 쉬프트 상태를 유지 관리합니다. 포인터 mbchar 하지만 눌인 호출에서는, 현재의 로케일이 쉬프트 상태를 필요로 하는 경우는 0 이외가 되돌려집니다. 쉬프트 상태를 필요로 하지 않는 경우는 0 이 되돌려집니다. 쉬프트 상태를 필요로 하는 경우, 쉬프트 상태는 초기 상태에 리셋트 됩니다. LC_CTYPE 인가 LC_ALL 카테고리를 지정해 setlocale() (을)를 호출한 다음에는, 내부 쉬프트 상태는 미정도리가 됩니다.

처리에 편리하게, 값이 0 의 와이드 캐릭터 (누르와이드 캐릭터) (은)는, 와이드 캐릭터 라인의 종료로서 인식됩니다. 값이 0 의 캐릭터 (누르바이트) (은)는, 멀티 바이트 캐릭터 라인의 종료로서 인식됩니다. 멀티 바이트 캐릭터에서는, 누르바이트열은 허가되고 있지 않습니다.

함수 mblen() (은)는, 멀티 바이트 캐릭터 mbchar 의 바이트장을 산출합니다. nbytes 까지가 검사됩니다.

함수 mbtowc() (은)는 멀티 바이트 캐릭터 mbchar (을)를 와이드 캐릭터로 변환해, 그 결과를 wcharp 하지만 가리키는 오브젝트에 격납합니다. nbytes 바이트까지가 검사됩니다.

함수 wctomb() (은)는 와이드 캐릭터 wchar (을)를 멀티 바이트 캐릭터로 변환해, 그 결과를 mbchar 에 격납합니다. mbchar 하지만 가리키는 오브젝트는, 멀티 바이트 캐릭터를 수용 가능한 한의 크기를 가지지 않으면 되지 않습니다.

함수 mbstowcs() (은)는, 멀티 바이트 캐릭터 라인 mbstring (을)를 와이드 캐릭터 라인 wcstring. (으)로 변환합니다. nwchars 의 크기의 와이드 캐릭터까지 밖에 격납되지 않습니다. 종료를 나타내는 누르와이드 캐릭터는, 빈 곳이 있는 경우에 부가됩니다.

함수 wcstombs() (은)는, 와이드 캐릭터 라인 wcstring (을)를 멀티 바이트 캐릭터 라인 mbstring (으)로 변환합니다. nbytes 바이트까지가 mbstring 에 격납됩니다. 캐릭터 라인의 마지막 단편적인 멀티 바이트 캐릭터는 격납되지 않습니다. 멀티 아르바이트 캐릭터 라인은, 빈 곳이 있으면 눌로 끝납니다.

반환값
현재의 로케일로 멀티 바이트 캐릭터가 서포트되어 있지 않은 경우, 이것들 모든 함수는, 캐릭터를 처리할 수 있는 경우는 -1 을 돌려주어, 처리할 수 없는 경우는 0 을 돌려줍니다.

mbchar 하지만 NULL 인 경우, 함수 mblen(), mbtowc(), wctomb() (은)는, 쉬프트 상태가 서포트되고 있는 경우는 0 이외를 돌려주어, 쉬프트 상태가 서포트되어 있지 않은 경우는 0 을 돌려줍니다. mbchar 하지만 유효하다라고, 이러한 함수는 mbchar 그리고 처리된 바이트수를 돌려줍니다. 멀티 아르바이트 캐릭터를 인식할 수 없는 경우나 변환할 수 없는 경우는 -1 을 돌려줍니다.

함수 mbstowcs() (은)는, 변환된 와이드 캐릭터의 수를 돌려줍니다. 종료를 나타내는 누르와이드 캐릭터는 수에 포함하지 않습니다. 함수 wcstombs() (은)는, 변환된 바이트수를 돌려줍니다. 종료를 나타내는 누르바이트는 수에 포함하지 않습니다. 부정한 멀티 바이트 캐릭터가 있으면(자), 어느 쪽의 함수도 -1 를 돌려줍니다.

관련 항목
mbrune(3), rune(3), setlocale(3), euc(4), utf2(4)

표준
함수 mblen(), mbstowcs(), mbtowc(), wcstombs() wctomb() 하 isoC 에 준거하고 있습니다.

버그
현재의 시스템은, 쉬프트 상태를 서포트하지 않습니다.