5

スタック上に可変長配列を作成する次のコード行:

char name[length] = {'\0'};

次のコンパイラ診断を生成します。

error: variable-sized object may not be initialized
warning: excess elements in array initializer
warning: (near initialization for ‘name’)

VLAを初期化するために利用できるオプションは何ですか?次のような行を使用する必要がありますか?

memset(name, 0, sizeof(name));

その代わり?

4

1 に答える 1

5

はい、VLAを初期化するためのコードを作成する必要があります(これは、memset()説明したようなもの、またはその他の気になる方法である可能性があります)。

これは単にC標準(§6.7.8)の制約です。

  1. 初期化するエンティティの型は、サイズが不明な配列か、可変長配列型ではないオブジェクト型でなければなりません。
于 2010-12-09T00:50:16.040 に答える