我是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};
但它显示错误 错误:'{'标记
之前的预期表达式我怎么能写出这些值.. ???
答案 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));