C 编程 - 灵活数组成员的非静态初始化
C Programming - Non static initialization of a flexible array member
我觉得我的英语太差了,无法理解关于此的其他文章。但无论如何:
我只是想我可以编写一个程序(用 C 语言),它可以存储一组卡片。
并不复杂,只需存储卡片的值和名称并打印出来。
我是 C 的初学者,因为我在我的书中的 "Strings in Structures" 部分,所以我想自己尝试结构。到目前为止,这是我的代码:
#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]的初始化)”
"non static initialization of a flexible array member"
我真的不明白这一点。在书中,一切都按预期进行。我试图重建书中的代码并更改名称,但它不起作用。我认为这是字符串的问题,因为如果我只使用整数,一切正常。
在另一个 post 中已经读到,每个字符串都应该手动分配,并且有一个代码示例,但我不知道所有的行应该是什么意思,我想了解我的代码的作用,所以我不要复制+粘贴。
你能解释一下为什么这不起作用吗?
PS:我目前正在windows写作,所以请不要使用bash命令来解释或类似的东西。
我也是德国人,我的英语不是 "yellow of the egg",尽量不使用复杂的 'sentence builds'(我希望你明白我的意思:D)和不寻常的词来解释。
感谢大家的帮助!
您需要为每张卡片的名称创建一些space。最简单的方法是将 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 '[=10=]' terminator
};
我觉得我的英语太差了,无法理解关于此的其他文章。但无论如何:
我只是想我可以编写一个程序(用 C 语言),它可以存储一组卡片。 并不复杂,只需存储卡片的值和名称并打印出来。 我是 C 的初学者,因为我在我的书中的 "Strings in Structures" 部分,所以我想自己尝试结构。到目前为止,这是我的代码:
#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]的初始化)” "non static initialization of a flexible array member" 我真的不明白这一点。在书中,一切都按预期进行。我试图重建书中的代码并更改名称,但它不起作用。我认为这是字符串的问题,因为如果我只使用整数,一切正常。 在另一个 post 中已经读到,每个字符串都应该手动分配,并且有一个代码示例,但我不知道所有的行应该是什么意思,我想了解我的代码的作用,所以我不要复制+粘贴。
你能解释一下为什么这不起作用吗? PS:我目前正在windows写作,所以请不要使用bash命令来解释或类似的东西。 我也是德国人,我的英语不是 "yellow of the egg",尽量不使用复杂的 'sentence builds'(我希望你明白我的意思:D)和不寻常的词来解释。
感谢大家的帮助!
您需要为每张卡片的名称创建一些space。最简单的方法是将 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 '[=10=]' terminator
};