función mbrlen() en C/C++

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:

  1. el número de bytes que completan un carácter multibyte válido
  2. -1 si se produce un error de codificación
  3. 0 si s apunta a un carácter nulo
  4. -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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *