0

我是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};

但它显示错误错误:“{”标记之前的预期表达式

我怎么能写值..???

4

2 回答 2

1

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

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

依此类推,直到每个元素都具有您想要的值。

于 2012-06-20T07:01:14.457 回答
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));
于 2012-06-20T07:09:06.557 回答