11

私は理解していないだけで、 wchar end に関する多くの情報を見つけることができません。

単一の null バイトで終わる場合、「009A」のようなものが Unicode シンボルの 1 つを表している場合、文字列の終わりではないことをどうやって知るのでしょうか?

2 つの null バイトで終わる場合は? うーん、よくわからないので、確認が必要です。

4

4 に答える 4

5

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単一のヌル バイトはワイド文字列を終了しません。

また、バイト順は実装定義であることにも注意してください。値が のワイド文字は、0x12348 ビット バイトのシーケンスとして表示される場合、次のいずれかとして表示されます。

  • 0x120x34
  • 0x340x12
  • 0x000x000x120x34
  • 0x340x120x000x00

可能性はそれだけではありません。

于 2012-09-06T19:36:03.340 に答える
1

宣言すれば

WCHAR tempWchar[BUFFER_SIZE];

あなたはそれをヌルにします

for (int i = 0; i < BUFFER_SIZE; i++)
            tempWchar[i] = NULL;
于 2016-11-02T19:43:00.030 に答える