2

C は初めてです。コンパイル時に次のエラーが発生します。

error: variably modified 'header' at file scope
error: variably modified 'sequence' at file scope

コード:

struct list{
  char header[list_header_size];
  char sequence[list_sequence_size];
  struct list *next;
};

エラーは、コンパイラがこれらの変数が最初から何であるかを知る必要があることを意味していると思いました。そこで、構造体を呼び出す main() をプログラムの最後に移動しました。また、プログラムの最初に変数を宣言しようとしましたが、それが正しく行われたかどうかはわかりません。私は試し char header; て みましたchar header[];

4

1 に答える 1

3

コンパイラが構造体のメンバーのタイプを知る必要があるのは正しいことです。タイプを知る必要がある理由の1つは、サイズを計算できるようにするためです。ただし、あなたの場合、構造体で一定のサイズではない2つの配列を定義しているため、サイズを知ることはできません。したがって、コンパイラは構造体の合計サイズを認識せず、これは型を知るという目的を無効にします。

必要なものに最も近いのは、2つのchar配列を2つのcharポインターに置き換え、それらが指すメモリを動的に割り当てることです。

于 2013-02-17T20:42:59.653 に答える