# std::mbsinit

From cppreference.com
< cpp‎ | string‎ | multibyte

Defined in header `<cwchar>` |  |
int mbsinit( const std::mbstate_t * ps); |  |

If `ps` is not a null pointer, the `mbsinit` function determines whether the pointed-to std::mbstate_t object describes the initial conversion state.

### Notes

Although a zero-initialized std::mbstate_t always represents the initial conversion state, there may be other values of std::mbstate_t that also represent the initial conversion state.

### Parameters

ps | - | pointer to the std::mbstate_t object to examine

### Return value

​0​ if `ps` is not a null pointer and does not represent the initial conversion state, nonzero value otherwise.

### Example

Run this code

    #include <clocale>
    #include <string>
    #include <iostream>
    #include <cwchar>

    int main()
    {
        // allow mbrlen() to work with UTF-8 multibyte encoding
        std::setlocale(LC_ALL, "en_US.utf8");
        // UTF-8 narrow multibyte encoding
        std::string str = u8"水"; // or u8"\u6c34" or "\xe6\xb0\xb4"
        std::mbstate_t mb = std::mbstate_t();
        (void)std::mbrlen(&str[0], 1, &mb);
        if (!std::mbsinit(&mb)) {
            std::cout << "After processing the first 1 byte of " << str
                      << " the conversion state is not initial\n";
        }

        (void)std::mbrlen(&str[1], str.size()-1, &mb);
        if (std::mbsinit(&mb)) {
            std::cout << "After processing the remaining 2 bytes of " << str
                      << ", the conversion state is initial conversion state\n";
        }
    }

Output:

    After processing the first 1 byte of 水 the conversion state is not initial
    After processing the remaining 2 bytes of 水, the conversion state is initial conversion state

### See also

mbstate_t | conversion state information necessary to iterate multibyte character strings (class)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/string/multibyte/mbsinit&oldid=95488"