---
name: "mbstate_t"
section: "3type"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/mbstate_t"
---

# mbstate\_t(3type)

multi-byte-character conversion state

## NAME

mbstate\_t - multi-byte-character conversion state

## LIBRARY

Standard C library (*libc*)

## SYNOPSIS

```
#include <wchar.h>
```

**typedef** /\* ... \*/  **mbstate\_t;**

## DESCRIPTION

Character conversion between the multibyte representation and the wide character representation uses conversion state, of type *mbstate\_t*. Conversion of a string uses a finite-state machine; when it is interrupted after the complete conversion of a number of characters, it may need to save a state for processing the remaining characters. Such a conversion state is needed for the sake of encodings such as ISO/IEC 2022 and UTF-7.

The initial state is the state at the beginning of conversion of a string. There are two kinds of state: the one used by multibyte to wide character conversion functions, such as [**mbsrtowcs**(3)](/mbsrtowcs/3.md), and the one used by wide character to multibyte conversion functions, such as [**wcsrtombs**(3)](/wcsrtombs/3.md), but they both fit in a *mbstate\_t*, and they both have the same representation for an initial state.

For 8-bit encodings, all states are equivalent to the initial state. For multibyte encodings like UTF-8, EUC-\*, BIG5, or SJIS, the wide character to multibyte conversion functions never produce non-initial states, but the multibyte to wide-character conversion functions like [**mbrtowc**(3)](/mbrtowc/3.md) do produce non-initial states when interrupted in the middle of a character.

One possible way to create an *mbstate\_t* in initial state is to set it to zero:

```
mbstate_t state;
memset(&state, 0, sizeof(state));
```

On Linux, the following works as well, but might generate compiler warnings:

```
mbstate_t state = { 0 };
```

## STANDARDS

C11, POSIX.1-2024.

## HISTORY

SUSv2, C99, POSIX.1-2001.

## SEE ALSO

[**mbrlen**(3)](/mbrlen/3.md), [**mbrtowc**(3)](/mbrtowc/3.md), [**mbsinit**(3)](/mbsinit/3.md), [**mbsrtowcs**(3)](/mbsrtowcs/3.md), [**wcrtomb**(3)](/wcrtomb/3.md), [**wcsrtombs**(3)](/wcsrtombs/3.md)
