空の角かっこで宣言された構造体メンバーは、柔軟な配列メンバー[]
と呼ばれます。これはcomp.lang.c FAQの質問 2.6 で説明されています (一番下までスクロールしてください)。柔軟な配列メンバーは、構造体の最後に宣言されたメンバーとしてのみ表示される場合があります。これは、コンパイラが不満を言っていることです。
しかし、それを構造体の最後に移動することは最善の解決策ではありません。おそらく、柔軟な配列メンバーをまったく使用したくないでしょう。(可能ですが、不要な複雑さが生じます。)
dasblinkenlight が言うように、name
メンバーをポインターにすることができます。
struct person {
char *name;
int age;
};
name
次に、人物の名前を表す文字列を指します。これは、文字列を保持するためにメモリを割り当てる必要があることを意味します。
または、最大サイズが固定されname
た の配列を作成できます。char
#define MAX_NAME 50
struct person {
char name[MAX_NAME];
int age;
};
その後、関数を使用しstrcpy
て値をコピーできます。バイトname
を超えてコピーしないように注意してください。MAX_NAME
関数ではinsert
、これらのステートメント:
people[nextcell].names;
people[nextcell].ages;
おそらくnames
andages
メンバー (より適切な名前: name
and age
) を初期化することを意図していましたが、実際には何もしません。それらはそれらのメンバーを参照しますが、それらに対しては何もしません。の場合、 (現在無視している) パラメータの値をメンバーage
に割り当てるだけです。age
age
people[nextcell].age = age;
値を に割り当てる方法は、name
それをポインターとして定義するか、配列として定義するかによって異なります。