Namespaces
Variants

mbtowc

From cppreference.net
Definido en el encabezado <stdlib.h>
int mbtowc ( wchar_t * pwc, const char * s, size_t n )
(hasta C99)
int mbtowc ( wchar_t * restrict pwc, const char * restrict s, size_t n )
(desde C99)

Convierte un carácter multibyte cuyo primer byte está apuntado por s a un carácter ancho, escrito en * pwc si pwc no es nulo.

Si s es un puntero nulo, restablece el estado de conversión global y determina si se utilizan secuencias de desplazamiento.

Contenidos

Notas

Cada llamada a mbtowc actualiza el estado global interno de conversión (un objeto estático de tipo mbstate_t , conocido únicamente por esta función). Si la codificación multibyte utiliza estados de cambio, se debe tener cuidado para evitar retrocesos o escaneos múltiples. En cualquier caso, múltiples hilos no deberían llamar a mbtowc sin sincronización: mbrtowc puede usarse en su lugar.

Parámetros

pwc - puntero al carácter ancho para salida
s - puntero al carácter multibyte
n - límite en el número de bytes en s que pueden ser examinados

Valor de retorno

Si s no es un puntero nulo, devuelve el número de bytes contenidos en el carácter multibyte o - 1 si los primeros bytes apuntados por s no forman un carácter multibyte válido o 0 si s apunta al carácter nulo ' \0 ' .

Si s es un puntero nulo, restablece su estado de conversión interno para representar el estado de desplazamiento inicial y devuelve 0 si la codificación multibyte actual no depende del estado (no utiliza secuencias de desplazamiento) o un valor distinto de cero si la codificación multibyte actual depende del estado (utiliza secuencias de desplazamiento).

Ejemplo

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
// print multibyte string to wide-oriented stdout
// equivalent to wprintf(L"%s\n", ptr);
void print_mb(const char* ptr)
{
    mbtowc(NULL, NULL, 0); // reset the conversion state
    const char* end = ptr + strlen(ptr);
    int ret = 0;
    for (wchar_t wc; (ret = mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret)
        wprintf(L"%lc", wc);
    wprintf(L"\n");
}
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    print_mb("z\u00df\u6c34\U0001F34C"); // or "zß水🍌"
}

Salida:

zß水🍌

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.24.7.2 La función mbtowc (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.22.7.2 La función mbtowc (p: 260)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.22.7.2 La función mbtowc (p: 358)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.20.7.2 La función mbtowc (p: 322)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.10.7.2 La función mbtowc

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)