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

しかし、それもうまくいきません。そのように配列に割り当てることはできません。このトリックは、初期化でのみ許可されます。

残っているのは、配列の要素を 1 つずつ割り当てることです。しかし、LOC を保存したい場合は、次の行に沿って何かを行うことができます。

static uint8 values[] = {0x42,0x65,0x64,0x20,0x52,0x6f,0x6f,0x6d};
memcpy(sCombined.au8LocationDescription, values, sizeof(values));
于 2012-06-20T07:09:06.557 に答える
1

Als のコメントが言うように、あなたがやろうとしていることは不可能です。このように各配列要素を個別に割り当てる必要があります

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

など、各要素が必要な値になるまで続けます。

于 2012-06-20T07:01:14.457 に答える