5

我正在使用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用来填写每个字段,但这并不能回答我的问题。

4

1 回答 1

0

在 C 中,这样做更容易:

Dude homer =
{
    "Homer",
    { "Dad", "Idiot", "Donut Lover", "Fewl" } // error?
};

不知道这是否有效,但您可以尝试:

Dude homer =
{
    .name = "Homer",
    .titles[] = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error?
};
于 2016-10-05T05:27:16.037 回答