【问题标题】:C 3d Array of charC 3d 字符数组
【发布时间】:2013-11-06 22:19:06
【问题描述】:
    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 的 3d 数组,有什么想法吗? 第一个 [] 应该是变量,第二个 [] 应该是多少个字符串,第三个应该是类别?

【问题讨论】:

    标签: c arrays


    【解决方案1】:

    你可能想做什么:

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

    它仍然是一个带有 char* 的二维数组。注意,二维数组的顺序是[row][column] 而不是[column][row]

    【讨论】:

    • 你的意思是const char *,当然。
    • 所以我不需要 3d 数组?
    • @LucasBertollo 是的,在这种情况下,2 维是绝对足够的。在我看来,更多的维度只会让它更复杂,更难维护。如果您使用 char* 作为数组的类型,则一个“条目”已经是一个以 null 结尾的字符串 - 所以维度实际上仅适用于字符串本身(每个 char 都不需要维度)。
    • @LucasBertollo 好吧,这是否是 3D 数组取决于观点;由于最后一个维度是char *,您还可以将其作为“第三维度”(即字符串的字符)进行索引。
    • 哦,多谢一件事 const 和变量名前的 * 是什么意思?
    【解决方案2】:

    如果你想要一个 3D 数组,那么最后一个维度必须对每个字符串都足够大:

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

    注意:'drawf' -> 'dwarf'。

    【讨论】:

      【解决方案3】:

      正如错误消息告诉您的那样,您尝试初始化的数组的长度不足以容纳这些字符串的所有字符。

      例如,“Giant Spider”需要 13 个字符,包括终止空字符 '\0'

      尝试以下方法:

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

      考虑这一点的方法是根据指针。不确定你是否熟悉它们,但 C 中的字符数组是作为指向数组中第一个字符的指针实现的。

      因此,数组的第一个索引指定指向字符指针数组的指针的数量

      第二个指定每个指针数组中指向字符数组的指针数量。

      最后,第三个索引指定包含数据的最终数组中的最大字符数(长度)。

      您想要一个 2-D 指针数组还是 3-D 字符数组取决于您计划在程序中的其他地方对数据执行什么操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 2014-05-06
        相关资源
        最近更新 更多