c - 使用指定的初始值设定项来初始化结构中的二维字符数组初始值设定项会在 VS2013 中发出错误 C2078

标签 c visual-studio visual-studio-2013 struct designated-initializer

我正在使用 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/

相关文章:

c - 指向结构内元素的指针 ( C )

c++ - 当取消请求排队时,pthread_cancel() 将如何响应?

c - 用 C 编写 AVR

c - perror 和 fprintf 到 stderr 之间有什么区别?

c# - Visual Studio C# : Why is a "using" directive insufficient for some libraries?

c# - 确定窗口打开的顺序

visual-studio - System.BadImageFormatException-无法解决

visual-studio - 如何在 Visual Studio 自动生成的注释中选择语言?

windows-store-apps - Windows App 项目不支持应用程序

c# - Visual Studio 运行不需要的代码