3
    char monsternivel1[][3][4] = {
    {"Rat","Bat","Spider"},
    {"Goblin","Orc","Drawf"},
    {"Dragon","Lich","Banshee"},
    {"Demon","Hydra","Giant Spider"}
    };

それは言います:

> E:\Dungeon Crawler.c||In function 'rndMonster':| E:\Dungeon
> Crawler.c|10|warning: initializer-string for array of chars is too
> long [enabled by default]| E:\Dungeon Crawler.c|10|warning: (near
> initialization for 'monsternivel1[0][2]') [enabled by default]|
> E:\Dungeon Crawler.c|11|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|11|warning:
> (near initialization for 'monsternivel1[1][0]') [enabled by default]|
> E:\Dungeon Crawler.c|11|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|11|warning:
> (near initialization for 'monsternivel1[1][2]') [enabled by default]|
> E:\Dungeon Crawler.c|12|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|12|warning:
> (near initialization for 'monsternivel1[2][0]') [enabled by default]|
> E:\Dungeon Crawler.c|12|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|12|warning:
> (near initialization for 'monsternivel1[2][2]') [enabled by default]|
> E:\Dungeon Crawler.c|13|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|13|warning:
> (near initialization for 'monsternivel1[3][0]') [enabled by default]|
> E:\Dungeon Crawler.c|13|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|13|warning:
> (near initialization for 'monsternivel1[3][1]') [enabled by default]|
> E:\Dungeon Crawler.c|13|warning: initializer-string for array of chars
> is too long [enabled by default]| E:\Dungeon Crawler.c|13|warning:
> (near initialization for 'monsternivel1[3][2]') [enabled by default]|

char の 3 次元配列がわかりませんでした。何かアイデアはありますか? 最初の [] は変数、2 番目の [] は文字列の数、3 番目はカテゴリですか?

4

3 に答える 3

5

おそらくやりたいこと:

const char *monsternivel1[4][3] = {
    {"Rat","Bat","Spider"},
    {"Goblin","Orc","Drawf"},
    {"Dragon","Lich","Banshee"},
    {"Demon","Hydra","Giant Spider"}
  };

char* を含む 2 次元配列のままです。2 次元配列の順序は であり、 ではないことに注意してください[row][column][column][row]

于 2013-11-06T22:20:52.950 に答える
3

3D 配列が必要な場合は、最後の次元が各文字列に対して十分な大きさでなければなりません。

char monsternivel1[][3][13] = {
    { "Rat", "Bat", "Spider" },
    { "Goblin", "Orc", "Dwarf" },
    { "Dragon", "Lich", "Banshee" },
    { "Demon", "Hydra", "Giant Spider" },
};

注: 'drawf' -> 'dwarf'.

于 2013-11-06T22:25:20.857 に答える
1

エラー メッセージが示すように、初期化しようとしている配列は、これらの文字列のすべての文字を保持するのに十分な長さではありません。

たとえば、「Giant Spider」には、終端のヌル文字を含めると 13 文字が必要'\0'です。

次のことを試してください。

char monsternivel1[4][3][13] = {
    {"Rat","Bat","Spider"},
    {"Goblin","Orc","Drawf"},
    {"Dragon","Lich","Banshee"},
    {"Demon","Hydra","Giant Spider"}
 };

これについて考える方法は、ポインターの観点からです。それらに慣れているかどうかはわかりませんが、C の文字配列は、配列の最初の文字へのポインターとして実装されています。

したがって、配列の最初のインデックスは、文字へのポインターの配列へのポインターの数を指定します。

2 番目は、各ポインター配列内の文字配列へのポインターの数を指定します。

最後に、3 番目のインデックスは、データを含む最終的な配列の最大文字数 (長さ) を指定します。

ポインターの 2 次元配列が必要か、文字の 3 次元配列が必要かは、プログラムの他の場所でデータをどう処理するかによって異なります。

于 2013-11-06T22:24:30.303 に答える