-2

私はプログラムに取り組んでいますが、コンパイラ エラーを理解できません。

arrays.c:12:21: error: flexible array member not at end of struct
arrays.c: In function 'insert':
arrays.c:22:4: warning: statement with no effect

これらは非常に単純なことだとわかっていますが、修正することはできません。私の挿入機能が正しいかどうかはわかりません。誰でも私を助けてもらえますか?ありがとう

#include <stdio.h>

#define AMOUNT 7




    return 0;
}
4

1 に答える 1

1

空の角かっこで宣言された構造体メンバーは、柔軟な配列メンバー[]と呼ばれます。これは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;

おそらくnamesandagesメンバー (より適切な名前: nameand age) を初期化することを意図していましたが、実際には何もしません。それらはそれらのメンバーを参照しますが、それらに対しては何もしません。の場合、 (現在無視している) パラメータの値をメンバーageに割り当てるだけです。ageage

people[nextcell].age = age;

値を に割り当てる方法は、nameそれをポインターとして定義するか、配列として定義するかによって異なります。

于 2012-07-14T20:18:49.443 に答える