2017-10-17 2 views
2

Impossible d'initialiser le tableau en séquence. En fait, je veux construire le message avec la longueur de 64. fournissant 64 index de tableau, le code semble plus long et prolixe. Je veux le faire en séquence afin d'éviter la verbosité.Impossible d'initialiser le tableau en séquence, afin d'éviter la verbosité du code


Mais j'initialisés un tableau comme celui-ci buf[] et j'ai essayé comme buf[6] également qui ne fonctionnait pas non plus.

error: expected expression before ‘]’ token 

Quelqu'un dit comment le faire? N'est-il pas possible en C d'initialiser un tableau dans une ligne différente de la déclaration?


ARRAY_SIZE donne simplement le nombre d'index de tableau.

code:

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

Les tableaux ne sont pas l'opérateur d'affectation. –

Répondre

2

Vous ne pouvez pas utiliser:

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

, sauf si elle est dans la déclaration, par exemple:

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

Une autre façon de passer tous les valeurs dans une déclaration utiliserait memcpy:

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

Les tableaux ne possèdent pas l'opérateur d'affectation mais les structures. Vous pouvez donc envelopper un tableau dans une structure.

C'est que vous pouvez faire quelque chose comme ce qui suit.

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

La sortie du programme est

fe b0 01 22 00 00 
44 b0 01 03 00