mbrlen
|
Definido en el encabezado
<wchar.h>
|
||
|
(desde C95)
(hasta C99) |
||
| (desde C99) | ||
Determina el tamaño, en bytes, de la representación de un carácter multibyte.
Esta función es equivalente a la llamada mbrtowc ( NULL , s, n, ps ? ps : & internal ) para algún objeto oculto internal de tipo mbstate_t , excepto que la expresión ps se evalúa solo una vez.
Contenidos |
Parámetros
| s | - | puntero a un elemento de una cadena de caracteres multibyte |
| n | - | límite en el número de bytes en s que pueden ser examinados |
| ps | - | puntero a la variable que contiene el estado de conversión |
Valor de retorno
La primera de las siguientes que se aplique:
- 0 si los siguientes n bytes o menos completan el carácter nulo o si s es un puntero nulo. Ambos casos reinician el estado de conversión.
- el número de bytes [ 1 ... n ] que completan un carácter multibyte válido
- ( size_t ) - 2 si los siguientes n bytes son parte de un carácter multibyte potencialmente válido, que aún está incompleto después de examinar todos los n bytes
- ( size_t ) - 1 si ocurre un error de codificación. El valor de errno es EILSEQ ; el estado de conversión no está especificado.
Ejemplo
#include <locale.h> #include <stdio.h> #include <string.h> #include <wchar.h> int main(void) { // permitir que mbrlen() funcione con codificación multibyte UTF-8 setlocale(LC_ALL, "en_US.utf8"); // codificación multibyte estrecha UTF-8 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)); }
Salida:
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
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.29.6.3.1 The mbrlen function (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.29.6.3.1 La función mbrlen (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.29.6.3.1 La función mbrlen (p: 442)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.24.6.3.1 La función mbrlen (p: 388)
Véase también
|
(C95)
|
convierte el siguiente carácter multibyte a carácter ancho, dado el estado
(función) |
|
devuelve el número de bytes en el siguiente carácter multibyte
(función) |
|
|
C++ documentation
para
mbrlen
|
|