我只是在学习C,而且我在向属性(pulses
)分配数组时遇到了问题。
我有一个结构:
typedef struct irPulseSet
{
int pulseCount;
int pulses[][2];
} irPulseSet;
我使用上面创建的irPulseSet
类型创建了一个新变量,并定义了一个数组:
irPulseSet upButton;
upButton.pulseCount = 31;
int upButtonPulses[31][2] =
{
{ 0 , 120 },
{ 440 , 360 },
{ 440 , 340 },
{ 440 , 1120 },
{ 420 , 380 },
{ 420 , 360 },
{ 400 , 1140 },
{ 420 , 1120 },
{ 420 , 380 },
{ 420 , 1140 },
{ 420 , 1120 },
{ 440 , 340 },
{ 440 , 360 },
{ 440 , 1120 },
{ 440 , 1120 },
{ 420 , 1120 },
{ 400 , 1140 },
{ 420 , 360 },
{ 440 , 340 },
{ 440 , 360 },
{ 440 , 1140 },
{ 440 , 360 },
{ 440 , 340 },
{ 440 , 380 },
{ 420 , 360 },
{ 440 , 1120 },
{ 440 , 1120 },
{ 440 , 1120 },
{ 440 , 27400 },
{ 7160 , 1500 },
{ 0 , 0 }
};
然后我将该数组分配给irPulseSet
结构中的属性。
upButton.pulses = upButtonPulses;
但是当我编译时,我收到错误:
无效使用灵活数组成员
我在这里做错了什么?
答案 0 :(得分:2)
在拥有动态分配的灵活数组成员之前,必须将struct中的pulse成员类型更改为指向2d数组的指针。
typedef struct irPulseSet
{
int pulseCount;
int (*pulses)[2]; //pointer to a 2d array
} irPulseSet;
要设置成员,您也可以这样做:
upButton.pulses = upButtonPulses;
或者更简洁的方法来初始化struct
irPulseSet upButton = { 31 , upButtonPulses } ;
答案 1 :(得分:0)
我在这里做错了什么?
您正在对数组类型进行分配(=
)。
如果您希望结构和数组都指向内存中的相同位置,请参阅self.的正确方向的答案点。但是,如果您想要数据的副本,请继续阅读。
无效使用灵活数组成员
您收到此错误的原因是,要使用灵活的数组成员,您必须为数组分配额外的空间,例如当您malloc
时。例如
irPulseSet upButton = malloc(sizeof(irPulseSet) + sizeof(upButtonPulses));
memcpy(upButton->pulses, upButtonPulses, sizeof(upButtonPulses));
答案 2 :(得分:0)
错误
int pulses[][2];
你需要定义大小!!尝试一次。