Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 mbtowc() 함수 – 멀티바이트 문자열을 와이드 문자로 변환하기

C 언어의 mbtowc() 함수란?

C 표준 라이브러리 함수 int mbtowc(wchar_t *pwc, const char *str, size_t n)는 멀티바이트(multibyte) 문자 시퀀스를 하나의 와이드 문자(wide character)로 변환하는 함수입니다. 이 함수는 <stdlib.h> 헤더 파일에 선언되어 있으며, UTF-8과 같은 다국어 인코딩을 처리할 때 유용하게 사용됩니다.

함수 원형

int mbtowc(wchar_t *pwc, const char *str, size_t n)

매개변수 설명

  • pwc − 변환된 결과를 저장할 wchar_t 타입 객체를 가리키는 포인터입니다.

  • str − 멀티바이트 문자의 첫 번째 바이트를 가리키는 포인터입니다.

  • n − 문자 길이를 검사할 때 확인할 최대 바이트 수입니다.

반환값

  • str이 NULL이 아닌 경우: str 위치부터 시작해 소비한(consumed) 바이트 수를 반환합니다. str이 널(null) 바이트를 가리키면 0을 반환하며, 변환에 실패하면 -1을 반환합니다.

  • str이 NULL인 경우: 현재 인코딩이 상태 전이(shift state)를 가지고 있으면 0이 아닌 값을 반환하고, 상태가 없는(stateless) 인코딩이라면 0을 반환합니다.

예제 코드

다음 예제는 mbtowc() 함수를 활용해 문자열을 와이드 문자로 변환한 뒤 출력하는 과정을 보여줍니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main () {
    char *str = "This is tutorialspoint.com";
    wchar_t mb[100];
    int len;

    len = mblen(NULL, MB_CUR_MAX);
    mbtowc(mb, str, len*strlen(str));
    wprintf(L"%ls \n", mb);

    return(0);
}

실행 결과

???

참고 사항

와이드 문자 입출력은 로케일(locale) 설정에 영향을 받습니다. 실행 환경의 로케일이 올바르게 지정되지 않으면 위 예제처럼 물음표(?)가 출력될 수 있습니다. 정상적인 출력을 얻으려면 프로그램 시작 부분에서 setlocale(LC_ALL, "")을 호출해 시스템 로케일을 적용하는 것이 좋습니다.