11

プログラムを書いていて、テキストを保持するメッセージ バッファを初期化する必要があります。私はそれを機能させることができますが、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。メッセージを初期化するこの方法はうまくいきます。ただし、それが正しい方法かどうかはわかりません。メッセージ自体が文字列の最初の文字を指しているためです。それで、サイズで初期化しますが、正しいですか?

文字列を初期化する正しい方法をより深く理解したかったのです。この同じ概念は、文字列にも拡張できます。

4

2 に答える 2

2

それは、何をしたいのか、データをどのように使用するのかによって大きく異なります。グローバルに必要な場合は、必ず静的配列を定義してください。メソッドでのみ必要な場合は、メソッドで同じことを行います。関数間でデータをやり取りしたい場合は、より長い寿命でmallocメモリを使用してください。

ただし、メソッド III は間違っています。これは 100 個のwchar_tポインターの配列です。100 個の大きなwchar_t配列とポインターを作成する場合は、次を使用する必要があります。

wchar_t message[100], *message_pointer;

また、用語に関しては、メソッド I で変数を宣言するだけで、変数に何も割り当てることはありません。

于 2013-04-11T14:39:55.680 に答える