スタックに含まれる要素の数はわかりません。 ユーザだけがランタイムであなたに「サイズ」を与えます。配列を静的に(コンパイル時に)割り当てることはできませんが、ユーザーからサイズを取得するときには動的に(実行時に)割り当てます。 サイズ "0"から "サイズ"を定義してから、このサイズの配列を宣言しようとしているため、「警告」が表示されます。
ISO 9899:2011 6.7.6.2:
If the expression is a constant expression, it shall have a value greater than zero.
"size"要素を含み、各要素が80文字の文字列である構造体として動的に配列を割り当てる方法はありますか?主な機能には
#define STR_LEN 80
struct stack {
int top;
char *string;
} stackv;
enum {
SUCCESS = 0,
FAILURE,
};
int InitStack(stackv *stackv, int size) {
if (size <= 0)
return FAILURE;
stackv->string = (char *)malloc(size*sizeof(char)*80);
if (stackv->string == NULL)
return FAILURE;
stackv->top = 0;
return SUCCESS;
}
、あなたは変数「stackv」を宣言し、私が書いた初期化関数への参照(ポインタ)でそれを渡します。
「フレキシブルアレイメンバー」を探します。 –
スタックデータ構造を使用している場合は、動的メモリ割り当てを試してください。 – RoadRunner
'malloc'を使うことができます。 – Swanand