在结构中写入数组

时间:2012-06-20 06:43:16

标签: c arrays struct

我是C的初学者。我有以下结构

typedef struct
{
    zuint8                      u8ZCLVersion;

 #ifdef CLD_BAS_ATTR_LOCATION_DESCRIPTION
    tsZCL_CharacterString       sLocationDescription;
    uint8                       au8LocationDescription[16];
 #endif

 #ifdef CLD_BAS_ATTR_PHYSICAL_ENVIRONMENT
    zenum8                      u8PhysicalEnvironment;
 #endif

 #ifdef CLD_BAS_ATTR_DEVICE_ENABLED
    zbool                       bDeviceEnabled;
 #endif
} tsCLD_Basic;

现在我要设置au8LocationDescription [16]字段。我正在使用这段代码。

tsCLD_Basic sCombined;
sCombined.au8LocationDescription[16] = {0x42,0x65,0x64,0x20,0x52,0x6f,0x6f,0x6d};

但它显示错误     错误:'{'标记

之前的预期表达式

我怎么能写出这些值.. ???

2 个答案:

答案 0 :(得分:1)

正如Als的评论所说,你想做的事情是不可能的。您需要像这样单独分配每个数组元素

    sCombined.au8LocationDescription[0] = 0x42;
    sCombined.au8LocationDescription[1] = 0x65;
    ...

等等,直到每个元素都具有您想要的值。

答案 1 :(得分:1)

sCombined.au8LocationDescription[16] = {0x42,0x65,0x64,0x20,0x52,0x6f,0x6f,0x6d};

这一行告诉编译器要做的是将{0x42,0x65,0x64,0x20,0x52,0x6f,0x6f,0x6d}分配给数组au8LocationDescription的第16个元素。

它无效。首先,au8LocationDescription [16]不是有效的位置。在那里写任何东西会导致未定义的行为。你的数组只有16个元素,所以你只允许使用0到15之间的索引。它甚至不代表一个数组,它是一个int。

但是因为你试图用一些值填充数组,这是无关紧要的。你可以试试

 sCombined.au8LocationDescription = {0x42,0x65,0x64,0x20,0x52,0x6f,0x6f,0x6d};

但这也行不通。您不能以这种方式分配给数组。这个技巧只能在初始化时使用。

剩下的就是逐个分配数组的元素。但是如果你想保存LOC,你可以按照这些方式做点什么:

static uint8 values[] = {0x42,0x65,0x64,0x20,0x52,0x6f,0x6f,0x6d};
memcpy(sCombined.au8LocationDescription, values, sizeof(values));