我正在使用 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
来填写每个字段,但这并没有回答我的问题。
最佳答案
在 C 中,这样做更容易:
Dude homer =
{
"Homer",
{ "Dad", "Idiot", "Donut Lover", "Fewl" } // error?
};
不知道这样行不行,不过你可以试试:
Dude homer =
{
.name = "Homer",
.titles[] = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error?
};
关于c - 使用指定的初始值设定项来初始化结构中的二维字符数组初始值设定项会在 VS2013 中发出错误 C2078,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35642994/