在C中初始化struct数组不能按预期工作

时间:2016-03-14 18:28:20

标签: c struct initialization

为什么这不起作用:

#define PORT_ID_MAX_CHAR                6

typedef struct  {
    int phys;
    char name[PORT_ID_MAX_CHAR];
}tPortMap;

struct tPortMap c_portMap[] = { 0, "test" }, { 1,"test" };
GCC对我说myfile.c:8:46: error: expected identifier or ‘(’ before ‘{’ token struct tPortMap c_portMap[] = { 0, "test" }, { 1,"test" };,我不知道为什么......我很困惑......

EDIT1

使用额外的括号我得到错误: struct tPortMap c_portMap[] = {{ 0, "test" }, { 1,"test" }};

myfile.c:8:17: error: array type has incomplete element type struct tPortMap c_portMap[] = {{ 0, "test" }, { 1,"test" }};

2 个答案:

答案 0 :(得分:2)

您需要另外一对括号来围绕数组元素的数据。

此外,由于您已经struct tPortMap编辑typedef,因此您无需使用tPortMap

tPortMap c_portMap[] = { { 0, "test" }, { 1,"test" } };
                       ^^                            ^^

使用时

struct tPortMap c_portMap[] = { { 0, "test" }, { 1,"test" } };

编译器认为你声明了一个新的struct,这显然是不完整的。

答案 1 :(得分:0)

请改为尝试:

#include <stdio.h>
#define PORT_ID_MAX_CHAR                6

typedef struct tPortMap {
    int phys;
    char name[PORT_ID_MAX_CHAR];
}tPortMap;

int main(void)
{
    tPortMap c_portMap[] = { { 0, "test" }, { 1,"test" } };

    printf("%s\n", c_portMap[0].name);
    return 0;
}