動的サイズの可変長配列(VLA)を0に初期化する
-
10-10-2019 - |
質問
スタックに可変長配列を作成するコードの次の行が次のとおりです。
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):
- 初期化されるエンティティのタイプは、未知のサイズの配列または可変長配列タイプではないオブジェクトタイプでなければなりません。
所属していません StackOverflow