2017-10-17 39 views
2

無法按順序初始化數組。實際上,我想要構造長度爲64的消息。提供64個數組索引,代碼看起來更長和冗長。我想按順序做,以避免冗長。無法按順序初始化數組,以避免代碼冗長


但我初始化數組這樣buf[],我試圖爲buf[6]也是沒有任何工作。

error: expected expression before ‘]’ token 

有沒有人告訴過要怎麼做? C中不可能在不是聲明的時候在不同的行中初始化一個數組嗎?


ARRAY_SIZE只是給出數組索引的計數。

代碼:

void a_test(char in) { 

    uint8_t buf[256]; 
    int i; 

    char cmd = in; 

    if (cmd == 'a') { 
     // it doesn't work like this 
     buf[] = { 0xfe, 0xb0, 0x01, 0x22, 0x00, 0x00}; 

     /* it works like this 
     buf[0] = 0xfe; 
     buf[1] = 0xb0; 
     buf[2] = 0x01; 
     buf[3] = 0x22; 
     buf[4] = 0x00; 
     buf[5] = 0x00; */ 
    } 


    if (cmd == 'b') { 
     buf[] = { 0x44, 0xb0, 0x01, 0x03, 0x00}; 
    } 


    for (i = 0; i < ARRAY_SIZE(buf); i++) { 
     printf("%02x ", buf[i]); 
    } 
} 

int main() { 
    a_test('a'); 
    return 0; 
} 
+1

數組沒有賦值運算符。 –

回答

2

不能使用:

buf[] = { 0xfe, 0xb0, 0x01, 0x22, 0x00, 0x00}; 

,除非它是在聲明例如:

uint8_t buf[]= { 0xfe, 0xb0, 0x01, 0x22, 0x00, 0x00}; 

另一種方式來傳遞所有一個語句中的值將使用memcpy:

memcpy(buf, (uint8_t[]) { 0xfe, 0xb0, 0x01, 0x22, 0x00, 0x00 }, sizeof (buf)); 
2

數組沒有賦值運算符,但結構確實有。所以你可以在一個結構中包裝一個數組。

這就是你可以做的事情如下。

#include <stdio.h> 
#include <stdint.h> 

void a_test(char in) 
{ 
    struct Array 
    { 
     size_t n; 
     uint8_t buf[256]; 
    } a = { 0 };   

    switch (in) 
    { 
    case 'a': 
     a = (struct Array) { 6, { 0xfe, 0xb0, 0x01, 0x22, 0x00, 0x00 } }; 
     break; 

    case 'b': 
     a = (struct Array) { 5, { 0x44, 0xb0, 0x01, 0x03, 0x00 } }; 
     break; 
    } 

    for (size_t i = 0; i < a.n; i++) 
    { 
     printf("%02x ", a.buf[i]); 
    } 
    putchar('\n'); 
} 

int main(void) 
{ 
    a_test('a'); 
    a_test('b'); 

    return 0; 
} 

程序輸出是

fe b0 01 22 00 00 
44 b0 01 03 00