# std::mbsinit

< cpp‎ | string‎ | multibyte

定义于头文件 `<cwchar>` |  |
int mbsinit( const std::mbstate_t* ps); |  |

若 `ps` 不是空指针，则 `mbsinit` 函数确定被指向的 std::mbstate_t 对象是否描述初始迁移状态。

### 注意

尽管零初始化的 std::mbstate_t 始终表示初始转换状态，亦可能有其他 std::mbstate_t 值表示初始转换状态。

### 参数

ps | - | 指向要检验的 std::mbstate_t 对象的指针

### 返回值

若 `ps` 不是空指针且不表示初始迁移状态则为 ​0​ ，否则为非零值。

### 示例

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

    int main()
    {
        // 允许 mbrlen() 以 UTF-8 多字节编码工作
        std::setlocale(LC_ALL, "en_US.utf8");
        // UTF-8 窄多字节编码
        std::string str = u8"水"; // 或 u8"\u6c34" 或 "\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";
        }
    }

输出：

    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

### 参阅

mbstate_t | 迭代多字节字符串所需的转换状态信息 (类)