【问题标题】:C Programming - Non static initialization of a flexible array memberC 编程 - 灵活数组成员的非静态初始化
【发布时间】:2016-04-27 19:11:14
【问题描述】:

我认为我的英语太糟糕了,无法理解其他关于此的文章。但无论如何:

我只是想我可以编写一个程序(用 C 语言),它可以存储一组卡片。 并不复杂,只需存储卡片的值和名称并打印出来。 我是 C 的初学者,因为我在我的书中的“结构中的字符串”部分,我想自己尝试结构。到目前为止,这是我的代码:

#include <stdio.h>

struct card
{
    int value;
    char name[];
};

int main(void)
{
    const struct card heart[13] = { {2,"two"}, {3,"three"}, {4,"four"}, {5,"five"}, {6,"six"}, {7,"seven"}, {8,"eight"}, {9,"nine"}, {10,"ten"}, {11,"jack"}, {12,"queen"}, {13,"king"}, {14,"ace"} };
    int i;

    for (i = 0; i < 13; ++i)
    {
        printf("The card heart-%s has the value of %i", heart[i].name, heart[i].value);
    }

return 0;

}

我只是想测试它是否有效,所以我只是在代码中编写了心脏卡片。如果我想编译这个文件,我的编译器 (gcc/mingw) 会遇到 26 个错误。它说: “(心脏[0]的近初始化)” “灵活数组成员的非静态初始化” 我真的不明白这一点。在书中,一切都按预期进行。我试图重建书中的代码并更改名称,但它不起作用。我认为这是字符串的问题,因为如果我只使用整数,一切正常。 在另一篇文章中已经读过,每个字符串都应该手动分配,并且有一个代码示例,但我不知道所有行应该是什么意思,我想了解我的代码是做什么的,所以我不复制+ 粘贴。

你能解释一下为什么这不起作用吗? PS:我目前是在windows下写的,所以请不要使用bash命令来解释或类似的东西。 我也是德国人,我的英语不是“鸡蛋里的黄色”,尽量不使用复杂的“句子结构”(我希望你知道我的意思:D)和不寻常的词来解释。

感谢大家的帮助!

【问题讨论】:

  • 如果您的“编译器遇到 26 个错误”,也许您应该先尝试编译一些更简单的东西?
  • 我怀疑您需要为卡名分配一些chars。在struct card 中,尝试从char name[] 更改为char name[16]
  • 或者你可以试试const char *name

标签: c arrays static structure flexible-array-member


【解决方案1】:

您需要为每张卡片的名称留出一些空间。最简单的方法是将您的 struct card 定义更改为:

struct card
{
  int value;
  char name[16];  // doesn't have to be 16, but make sure it's large enough to hold each card name plus a '\0' terminator
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多