无法将数组赋给struct属性

时间:2014-04-19 15:14:33

标签: c arrays struct

我只是在学习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;

但是当我编译时,我收到错误:

  

无效使用灵活数组成员

我在这里做错了什么?

3 个答案:

答案 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];

你需要定义大小!!尝试一次。