プログラムを書いていて、テキストを保持するメッセージ バッファを初期化する必要があります。私はそれを機能させることができますが、Cで文字列を初期化するために使用されるさまざまな方法を以下に書いており、違いを理解したいと思っています. また、wchar_t
/char
文字列を初期化するための最も適切な方法はどれですか?
方法 I:
wchar_t message[100];
wchar_t
私の理解に基づいて、これは200バイトのメモリ空間を割り当てます( Windows OSではサイズは2バイトだと思います)。このメモリ割り当ては静的であり、コンパイル時に実行可能ファイルの .data セクション内に割り当てられます。
message は、文字列の最初の文字を指すメモリ アドレスそのものでもあります。
文字列を初期化するこの方法は、私にとってはうまくいきます。
方法 II:
wchar_t *message;
message=(wchar_t *) malloc(sizeof(wchar_t) * 100);
このメソッドは、最初に変数 message を へのポインタとして初期化しますwchar_t
。ワイド文字の配列です。
次に、この文字列にメモリを動的に割り当てます。私はそれの構文を正しく書いたと思います。
プログラムでこのメソッドを使用すると、文字列内のスペースの後のテキストが読み取られません。
Example text: "This is a message"
変数メッセージには「This」のみが読み込まれ、その後にテキストは読み込まれません。
方法 III:
wchar_t *message[100];
これは、メッセージを 100 ワイド文字の配列と へのポインタとして定義しますwchar_t
。メッセージを初期化するこの方法はうまくいきます。ただし、それが正しい方法かどうかはわかりません。メッセージ自体が文字列の最初の文字を指しているためです。それで、サイズで初期化しますが、正しいですか?
文字列を初期化する正しい方法をより深く理解したかったのです。この同じ概念は、文字列にも拡張できます。