小智 9
由于宽字符串是宽字符数组,因此它甚至不能以单字节NUL结尾.这是一个两字节的NUL.(C/C++中的数组只能保存相同类型的成员,因此大小相同).
此外,对于ASCII标准字符,总是有一个或三个单字节0,因为只有扩展字符以非零第一字节开始(取决于wchar_t是16位还是32位 - 为简单起见,我假设为16位和小端):
HELLO is 72 00 69 00 76 00 76 00 79 00 00 00
Run Code Online (Sandbox Code Playgroud)
在这里您可以阅读更多宽字符:http : //en.wikipedia.org/wiki/Wide_character#Size_of_a_wide_character
终止符是 L'\0',表示一个 16 位空字符,所以它就像两个 8 位空字符。
请记住,“009A”只有 1 个 wchar,因此不是空 wchar。
在C中(引用N1570草案,第7.1.1节):
甲宽字符串是由封端的宽字符的连续序列,并且包括第一个空宽字符.
其中"宽字符"是类型的值,以整数类型wchar_t定义<stddef.h>.
我在C++标准的N3337草案中找不到"宽字符串"的定义,但它应该是类似的.一个小的区别是wchar_tC中的typedef和C++中的内置类型(名称是关键字).但是由于C++共享大部分C库,包括作用于宽字符串的函数,因此可以安全地假设C和C++定义是兼容的.(如果有人能在C++标准中找到更具体的内容,请评论或编辑此段落.)
在C和C++中,a的大小wchar_t是实现定义的.它通常是2或4个字节(16或32位,除非你是一个非常奇特的系统,字节大于8位).宽字符串是一系列宽字符(wchar_t值),以空宽字符结尾.终止宽字符将具有与任何其他宽字符相同的大小,通常为2或4个字节.
特别是,如果wchar_t大于char,则单个空字节不会终止宽字符串.
值得注意的是,字节顺序是实现定义的.0x1234当作为8位字节序列查看时,具有该值的宽字符可能显示为以下任何一个:
0x12, 0x340x34, 0x120x00,0x00,0x12,0x340x34,0x12,0x00,0x00而这些并非唯一的可能性.