我有一个初始化数组的问题,该数组是结构数组的一部分。 结构的类型是
typedef stuct {
unsigned char myarray[];
bool flag;
}myStructType;
我创建了一个这种结构类型的数组,并想要初始化它
myStructType myStruct[2] = {
{
{5,6,7},
false
},
{
{1,2},
true
}
};
myStruct是一个配置结构,我有代码,它将循环遍历结构的所有元素,根据init值执行一些操作。
我在Linux嵌入式平台上使用arm-v5te-linux-gnueabi-g ++编译器。
问题是当我编译代码时,我收到以下错误
错误:'unsigned char [0]'
的初始化程序太多
任何解决方案? 感谢
答案 0 :(得分:0)
我不知道一个允许你拥有这样一个struct
的编译器。它似乎不可能弄清楚如何访问flag
。
如果可以,请将myarray
重构为另一个链接的结构。
答案 1 :(得分:0)
忽略编译器问题,请考虑以下事项:
struct myStructType {
unsigned char myarray[];
bool flag;
};
myStructType a = { { 5, 6, 7 }, true };
myStructType b = { { 1, 2 }, true };
什么是sizeof(myStructType)
(或更重要的是,flag
的偏移量是多少?)这是无法回答的,因为这种情况是不可能的。你有几个选择。您可以对myarray
的最大大小进行硬编码:
struct myStructType {
unsigned char myarray[4];
bool flag;
};
你可以把它作为指针并分别初始化数组:
struct myStructType {
unsigned char *myarray;
bool flag;
};
unsigned char a[] = { 5, 6, 7 };
unsigned char b[] = { 1, 2 };
myStructType myStruct[2] = { { a, true }, { b, false } };
您可以执行与上面相同的操作,但使用以null结尾的字符串:
struct myStructType {
unsigned char *myarray;
bool flag;
};
unsigned char a[] = "\005\006\007";
unsigned char b[] = "\001\002";
myStructType myStruct[2] = { { a, true }, { b, false } };
或直接,如果const
上的myarray
正常:
struct myStructType {
const unsigned char *myarray;
bool flag;
};
myStructType myStruct[2] = {
{ "\005\006\007", true },
{ "\001\002", false }
};
还有其他选择。
顺便说一下,你不需要C ++中的typedef struct { } name
语法,你可以struct name { }
。