La función mbrlen() en C/C++ determina el tamaño en bytes del resto del carácter multibyte cuyo primer byte apunta str, dado el estado de conversión actual ps. El comportamiento de esta función depende de la categoría LC_CTYPE de la configuración regional de C seleccionada.
Sintaxis:
size_t mbrlen( const char* str, size_t n, mbstate_t* ps)
Parámetros: La función acepta tres parámetros obligatorios que se describen a continuación:
- str: especifica el puntero al primer byte de la string multibyte para examinar
- n: especifica el número máximo de bytes en s para examinar
- pd: especifica el puntero al objeto mbstate_t que define un estado de conversión
Valor devuelto: la función devuelve cuatro valores como se muestra a continuación:
- el número de bytes que completan un carácter multibyte válido
- -1 si se produce un error de codificación
- 0 si s apunta a un carácter nulo
- -2 si los siguientes n bytes son parte de un carácter multibyte posiblemente válido, que aún está incompleto después de examinar todos los n bytes
Los siguientes programas ilustran la función anterior:
Programa 1:
// C++ program to illustrate // mbrlen() function #include <bits/stdc++.h> using namespace std; // Function to find the size of // the multibyte character void check_(const char* str, size_t n) { // Multibyte conversion state mbstate_t ps = mbstate_t(); // number of byte to be saved in returnV int returnV = mbrlen(str, n, &ps); if (returnV == -2) cout << "Next " << n << " byte(s) doesn't" << " represent a complete" << " multibyte character" << endl; else if (returnV == -1) cout << "Next " << n << " byte(s) doesn't " << "represent a valid multibyte character" << endl; else cout << "Next " << n << " byte(s) of " << str << "holds " << returnV << " byte" << " multibyte character" << endl; } // Driver code int main() { setlocale(LC_ALL, "en_US.utf8"); char str[] = "\u10000b5"; // test for first 1 byte check_(str, 1); // test for first 6 byte check_(str, 6); return 0; }
Producción:
Next 1 byte(s) doesn't represent a complete multibyte character Next 6 byte(s) of á??0b5holds 3 byte multibyte character
Programa 2:
// C++ program to illustrate // mbrlen() function // with empty string #include <bits/stdc++.h> using namespace std; // Function to find the size of the multibyte character void check_(const char* str, size_t n) { // Multibyte conversion state mbstate_t ps = mbstate_t(); // number of byte to be saved in returnV int returnV = mbrlen(str, n, &ps); if (returnV == -2) cout << "Next " << n << " byte(s) doesn't" << " represent a complete" << " multibyte character" << endl; else if (returnV == -1) cout << "Next " << n << " byte(s) doesn't " << "represent a valid multibyte character" << endl; else cout << "Next " << n << " byte(s) of " << str << "holds " << returnV << " byte" << " multibyte character" << endl; } // Driver code int main() { setlocale(LC_ALL, "en_US.utf8"); char str[] = ""; // test for first 1 byte check_(str, 1); // test for first 3 byte check_(str, 3); return 0; }
Producción:
Next 1 byte(s) of holds 0 byte multibyte character Next 3 byte(s) of holds 0 byte multibyte character
Publicación traducida automáticamente
Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA