空终止多字节字符串
来自cppreference.com
                    
                                        
                    
                    
                                                            
                    空终止多字节字符串( null-terminated multibyte string, NTMBS ),或“多字节字符串”,是后随拥有零值的字节(空终止字符)的非零字节序列。
存储于该字符串中的每个字符可能占用多于一个字节。用于表示字符的编码是本地环境限定的:它可以是 UTF-8 、 GB18030 、 EUC-JP 、 Shift-JIS 等。例如,字符数组 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} 是一个以UTF8编码包含 "你好" 的 NTMBS :首三个字节编码字符 "你" ,接下来三个字节编码字符 "好" 。编码于 GB18030 的相同字符串是字符数组 {'\xc4', '\xe3', '\xba', '\xc3', '\0'} ,其中二个字符各编码为双字节序列。
一些多字节编码中,任何给定的多字节字符序列可以根据之前的字节序列,称之为“迁移序列”,表示不同的字符。这种编码被称为状态依赖的:要求知晓当前迁移状态以转译每个字符。 NTMBS 仅若以初始迁移状态开始及结束才合法:若使用迁移序列,则对应的无迁移序列必须在空终止字符前存在。这种编码的例子是 7-bit JIS 、 BOCU-1 及 SCSU 。
多字节字符串与空终止字节字符串( NTBS )布局兼容,即能用相同的设施存储、复制并检验,除了计算字符数。若当前本地环境生效,则 I/O 函数亦处理多字节字符串。多字节字符串可用 std::codecvt 成员函数、 std::wstring_convert 或下列依赖本地环境的转换函数与宽字符串相互转换:
多字节/宽字符串转换
|   定义于头文件  
<cstdlib>  | |
|   返回下一个多字节字符中的字节数  (函数)  | |
|   将下一个多字节字符转换成宽字符  (函数)  | |
|   转换宽字符为其多字节表示  (函数)  | |
|   转换窄多字节字符串为宽字符串  (函数)  | |
|   转换宽字符串为窄多字节字符串  (函数)  | |
|   定义于头文件  
<cwchar>  | |
|   检查 mbstate_t 对象是否表示初始迁移状态  (函数)  | |
|   若可能,则加宽单字节窄字符为宽字符  (函数)  | |
|   若可能,则窄化宽字符为单字节窄字符  (函数)  | |
|   给定状态,返回下一个多字节字符中的字节数  (函数)  | |
|   给定状态,转换下个多字节字符为宽字符  (函数)  | |
|   给定状态,转换宽字符到其多字节表示  (函数)  | |
|   给定状态,转换窄多字节字符串到宽字符串  (函数)  | |
|   给定状态,转换宽字符串为窄多字节字符串  (函数)  | |
|   定义于头文件  
<cuchar>  | |
|    (C++20)  | 
  转换窄多字节字符为 UTF-8 编码  (函数)  | 
|    (C++20)  | 
  转换 UTF-8 字符串为窄多字节编码  (函数)  | 
|    (C++11)  | 
  转换窄多字节字符为 UTF-16 编码  (函数)  | 
|    (C++11)  | 
  转换 16 位宽字符为窄多字节字符串  (函数)  | 
|    (C++11)  | 
  转换窄多字节字符为 UTF-32 编码  (函数)  | 
|    (C++11)  | 
  转换 32 位宽字符为窄多字节字符串  (函数)  | 
类型
|   定义于头文件  
<cwchar>  | |
|   迭代多字节字符串所需的转换状态信息  (类)  | |
宏
|   定义于头文件  
<climits>  | |
|    MB_LEN_MAX  | 
  多字节字符中的最大字节数  (宏常量)  | 
|   定义于头文件  
<cstdlib>  | |
|    MB_CUR_MAX  | 
 当前 C 本地环境中多字节字符的最大字节数 (宏变量)  | 
|   定义于头文件  
<cuchar>  | |
|    __STDC_UTF_16__ (C++11)  | 
  指示 mbrtoc16 与 c16rtomb 使用 UTF-16 编码  (宏常量)  | 
|    __STDC_UTF_32__ (C++11)  | 
  指示 mbrtoc32 与 c32rtomb 使用 UTF-32 编码  (宏常量)  |