私は理解していないだけで、 wchar end に関する多くの情報を見つけることができません。
単一の null バイトで終わる場合、「009A」のようなものが Unicode シンボルの 1 つを表している場合、文字列の終わりではないことをどうやって知るのでしょうか?
2 つの null バイトで終わる場合は? うーん、よくわからないので、確認が必要です。
C ( N1570 ドラフト、セクション 7.1.1 を引用):
ワイド文字列は、最初のヌル ワイド文字で終了し、それを含むワイド文字の連続したシーケンスです。
ここで、「ワイド文字」は type の値であり、整数型としてwchar_t
定義されています。<stddef.h>
C++ 標準の N3337 ドラフトで「ワイド文字列」の定義を見つけることができませんが、似ているはずです。1 つの小さな違いはwchar_t
、C では typedef であり、C++ では組み込み型 (名前がキーワード) であることです。しかし、C++ はワイド文字列に作用する関数を含め、ほとんどの C ライブラリを共有しているため、C と C++ の定義には互換性があると想定しても問題ありません。(誰かが C++ 標準でより具体的なものを見つけることができる場合は、この段落にコメントするか編集してください。)
C と C++ の両方で、a のサイズwchar_t
は実装定義です。通常は 2 バイトまたは 4 バイトです (バイト数が 8 ビットを超える特殊なシステムを使用している場合を除き、16 ビットまたは 32 ビットです)。ワイド文字列は、ワイド文字 (wchar_t
値) のシーケンスであり、null ワイド文字で終了します。終端のワイド文字は、他のワイド文字と同じサイズ (通常は 2 バイトまたは 4 バイト) になります。
特に、wchar_t
が より大きい場合char
、単一のヌル バイトはワイド文字列を終了しません。
また、バイト順は実装定義であることにも注意してください。値が のワイド文字は、0x1234
8 ビット バイトのシーケンスとして表示される場合、次のいずれかとして表示されます。
0x12
、0x34
0x34
、0x12
0x00
、0x00
、0x12
、0x34
0x34
、0x12
、0x00
、0x00
可能性はそれだけではありません。
宣言すれば
WCHAR tempWchar[BUFFER_SIZE];
あなたはそれをヌルにします
for (int i = 0; i < BUFFER_SIZE; i++)
tempWchar[i] = NULL;