mblen
|
헤더 파일에 정의됨
<stdlib.h>
|
||
|
int
mblen
(
const
char
*
s,
size_t
n
)
;
|
||
s
가 가리키는 첫 번째 바이트부터 시작하는 멀티바이트 문자의 크기를 바이트 단위로 결정합니다.
만약
s
가 null 포인터라면,
전역 변환 상태를 재설정하고
(C23까지)
시프트 시퀀스 사용 여부를 결정합니다.
이 함수는 mbtowc ( ( wchar_t * ) 0 , s, n ) 호출과 동등하지만, mbtowc 의 변환 상태가 영향을 받지 않는다는 점이 다릅니다.
목차 |
매개변수
| s | - | 멀티바이트 문자에 대한 포인터 |
| n | - | 검사 가능한 s 내 바이트 수의 제한 |
반환값
만약
s
가 null 포인터가 아니라면, 멀티바이트 문자에 포함된 바이트 수를 반환하거나
-
1
를 반환합니다(
s
가 가리키는 첫 번째 바이트들이 유효한 멀티바이트 문자를 형성하지 않는 경우) 또는
0
를 반환합니다(
s
가 null 문자
'
\0
'
를 가리키는 경우).
만약
s
가 널 포인터라면,
내부 변환 상태를 초기 시프트 상태를 나타내도록 재설정하고
(C23까지)
현재 멀티바이트 인코딩이 상태 비의존적(시퀀스 시프트를 사용하지 않음)인 경우
0
을 반환하며, 현재 멀티바이트 인코딩이 상태 의존적(시퀀스 시프트를 사용함)인 경우 0이 아닌 값을 반환합니다.
참고 사항
|
|
(C23까지) |
|
|
(C23부터) |
예제
#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // 멀티바이트 문자열의 문자 수는 mblen() 결과의 합입니다 // 참고: 더 간단한 방법은 mbstowcs(NULL, str, sz)입니다 size_t strlen_mb(const char* ptr) { size_t result = 0; const char* end = ptr + strlen(ptr); mblen(NULL, 0); // 변환 상태 초기화 while(ptr < end) { int next = mblen(ptr, end - ptr); if (next == -1) { perror("strlen_mb"); break; } ptr += next; ++result; } return result; } void dump_bytes(const char* str) { for (const char* end = str + strlen(str); str != end; ++str) printf("%02X ", (unsigned char)str[0]); printf("\n"); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); const char* str = "z\u00df\u6c34\U0001f34c"; printf("문자열 \"%s\"는 %zu개의 문자로 구성되었지만 %zu바이트입니다: ", str, strlen_mb(str), strlen(str)); dump_bytes(str); }
가능한 출력:
문자열 "zß水🍌"는 4개의 문자로 구성되었지만 10바이트입니다: 7A C3 9F E6 B0 B4 F0 9F 8D 8C
참고문헌
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.22.7.1 mblen 함수 (p: 260)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.22.7.1 mblen 함수 (p: 357)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.20.7.1 mblen 함수 (p: 321)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.10.7.1 mblen 함수
참고 항목
|
다음 멀티바이트 문자를 와이드 문자로 변환
(함수) |
|
|
(C95)
|
상태를 고려하여 다음 멀티바이트 문자의 바이트 수를 반환
(함수) |
|
C++ documentation
for
mblen
|
|