5

私はVS2013を使用しています。プログラム全体は C++ ではなく C です。

このような「文字列の配列」を問題なく初期化できます。

char titles[4][80] = { "Dad", "Idiot", "Donut Lover", "Fewl" }; // OK!

次のように宣言された構造体があります。

typedef struct
{
    char name[80];
    char titles[4][80];
} Dude;

次のように構造体を初期化しようとすると:

Dude homer =
{
    .name = "Homer",
    .titles = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error?
};

「エラー C2078: 初期化子が多すぎます」というメッセージが表示されます。これは、配列の初期化が.titles = { ...原因です。行を削除すると、エラーはなくなります。このエラーが発生するのはなぜですか? 構造体初期化子内でこのタイプの文字列初期化を達成する別の方法はありますか?

構造体の宣言を次のように変更すると

typedef struct
{
    char name[80];
    char *titles[4];
} Dude;

エラーはなくなります。ただし、これは私が変更できるものではありません。コード ベースの他の部分では、この構造体のサイズが正確に 400 バイトである必要があります。

strcpyさらに、各フィールドに入力するために使用できることはよく知っていますが、それは私の質問には答えません。

4

1 に答える 1