質問

スタックに可変長配列を作成するコードの次の行が次のとおりです。

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));

その代わり?

役に立ちましたか?

解決

はい、VLAの初期化のためのコードを記述する必要があります(これは memset() あなたが説明したように、またはあなたが気にする他の方法)。

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

  1. 初期化されるエンティティのタイプは、未知のサイズの配列または可変長配列タイプではないオブジェクトタイプでなければなりません。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top