mbrlen
From cppreference.net
|
헤더 파일에 정의됨
<wchar.h>
|
||
|
(C95부터)
(C99 이전까지) |
||
| (C99부터) | ||
멀티바이트 문자의 표현 크기를 바이트 단위로 결정합니다.
이 함수는 mbrtowc ( NULL , s, n, ps ? ps : & internal ) 호출과 동등하며, 단일 internal 객체(타입 mbstate_t )에 대해 작동한다는 점을 제외하면, ps 표현식이 단 한 번만 평가된다는 차이가 있습니다.
목차 |
매개변수
| s | - | 멀티바이트 문자 문자열의 요소에 대한 포인터 |
| n | - | 검사될 수 있는 s 내 바이트 수의 제한 |
| ps | - | 변환 상태를 보유하는 변수에 대한 포인터 |
반환값
다음 중 먼저 적용되는 항목:
- 0 다음 n 바이트 이내로 널 문자를 완성하거나 s 가 널 포인터인 경우. 두 경우 모두 변환 상태를 초기화합니다.
- 유효한 멀티바이트 문자를 완성하는 바이트 수 [ 1 ... n ]
- ( size_t ) - 2 다음 n 바이트가 유효할 가능성이 있는 멀티바이트 문자 일부이며, n 바이트 모두를 검사한 후에도 여전히 불완전한 경우
- ( size_t ) - 1 인코딩 오류가 발생한 경우. errno 값은 EILSEQ 입니다; 변환 상태는 지정되지 않습니다.
예제
이 코드 실행
#include <locale.h> #include <stdio.h> #include <string.h> #include <wchar.h> int main(void) { // allow mbrlen() to work with UTF-8 multibyte encoding setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = "水"; size_t sz = strlen(str); mbstate_t mb; memset(&mb, 0, sizeof mb); int len1 = mbrlen(str, 1, &mb); if (len1 == -2) printf("The first 1 byte of %s is an incomplete multibyte char" " (mbrlen returns -2)\n", str); int len2 = mbrlen(str + 1, sz - 1, &mb); printf("The remaining %zu bytes of %s hold %d bytes of the multibyte" " character\n", sz - 1, str, len2); printf("Attempting to call mbrlen() in the middle of %s while in initial" " shift state returns %zd\n", str, mbrlen(str + 1, sz - 1, &mb)); }
출력:
The first 1 byte of 水 is an incomplete multibyte char (mbrlen returns -2) The remaining 2 bytes of 水 hold 2 bytes of the multibyte character Attempting to call mbrlen() in the middle of 水 while in initial shift state returns -1
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.29.6.3.1 mbrlen 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.29.6.3.1 mbrlen 함수 (p: TBD)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.29.6.3.1 mbrlen 함수 (p: 442)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.24.6.3.1 mbrlen 함수 (p: 388)
참고 항목
|
(C95)
|
다음 멀티바이트 문자를 와이드 문자로 변환 (상태 정보 사용)
(함수) |
|
다음 멀티바이트 문자의 바이트 수를 반환
(함수) |
|
|
C++ documentation
for
mbrlen
|
|