Hilfe zu struct



  • Hallo Zusammnen,
    vielleicht kann mir jemand helfen?

    Ich habe in einer Struktur 2 Int Variablen und ein Int Array definiert. Ich kann die beiden Int Variablen und das Int Array[0] ausgeben.
    Ich schaffe es aber nicht die weiteren Inhalte des Arrays auzugeben. Ich weiß nicht wie man darauf zugreift.
    Hier mein Code.

    #include<stddef.h>
    #include<stdio.h>
    
    struct Can
    {
      int CanID;
      int CanLen;
      int CanData1[8];
      //int CanData2;
    };
    
    int main(void)
    {
        struct Can msg1={0x100, 0x01, 0x11, 0x66};
        struct Can msg2={200, 2, 22};
        struct Can msg3={300, 3, 44};
        struct Can msg4={400, 4, 55};
    
        struct Can* data[]={ &msg1, &msg2, &msg3, &msg4};
    
        //size_t data_count = sizeof(data);
        //size_t data_count2 = sizeof(*data);
        data_count = sizeof(data) / sizeof(*data);
    
        printf("Adresse CanData1: %d , Adresse CanData2 :%d\n", &msg1.CanData1[0], &msg1.CanData1[1]);
       
       for( size_t i=0; i<data_count; i++ )
    {
            printf( "CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x\n", data[i]->CanID, data[i]->CanLen, *data[i]->CanData1);
          //printf( "CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x, CanData 2: 0x%x\n", data[i]->CanID, data[i]->CanLen, data[i]->CanData1, data[i]->CanData2);
     }
        return 0;
    }
    

    Ein weiter Frage wäre ob man in CodeBlocks das Cosolenfenster so einstellen kann, dass es bei mhreren Bildschirmen nicht immer hinter dem Codefenster verschwindet?

    Viele Grüße

    Michael



  • @mj1234 sagte in Hilfe zu struct:

    > //printf( "CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x, CanData 2: 0x%x\n", data[i]->CanID, data[i]->CanLen, data[i]->CanData1, data[i]->CanData2);
    

    CanData2 gibt es doch gar nicht!
    Es gibt CanData1[0], CanData1[1] usw.



  • Die Zeile ist doch auskommentiert.
    Die diente nur für meine Tests.



  • Dann weiß ich nicht, was Du willst ... was genau geht denn nicht?

    Zeig mal den Code, den Du haben möchtest, und warum der nicht geht (Fehlermeldungen vom Compiler).

    @mj1234 sagte in Hilfe zu struct:

    Ich habe in einer Struktur 2 Int Variablen und ein Int Array definiert. Ich kann die beiden Int Variablen und das Int Array[0] ausgeben.
    Ich schaffe es aber nicht die weiteren Inhalte des Arrays auzugeben.

    Dein struct hat keine weiteren Elemente (außer CanData1[1] bis CanData1[7]), was also willst Du?



  • Alles wichtige als Kommentar im Programm.
    Das was Du hier nutzt ist C und kein C++. Das nächste Mal bitte in die richtige Kategorie posten.

    #include<stddef.h>
    #include<stdio.h>
    #include<stdlib.h>
    
    // Das ist ein C Programm, weshalb in der Rubrik C++?
    
    #define SIZE_CAN_DATA 8
    
    struct Can {
      int CanID;
      int CanLen;
      int CanData1[SIZE_CAN_DATA];
    };
    
    int main(void) {
        // Hier werden nicht alle Felder von Can initialisiert.
        // Dazu werde eine falsche Initialisierung für das Feld CanData1 gewählt.
        struct Can msg1={0x100, 0x01, {0x11, 0x66}};
        struct Can msg2={200, 2, {22}};
        struct Can msg3={300, 3, {44}};
        struct Can msg4={400, 4, {55}};
    
        struct Can* data[] = {&msg1, &msg2, &msg3, &msg4};
        // Datentyp für data_count fehlte
        size_t data_count = sizeof(data) / sizeof(*data);
    
        // hier sollen Zeiger ausgegeben werden
        // Daher die richtigen Formate wählen, und den Cast auf (void*) durchführen.
        printf("Adresse CanData1: %p , Adresse CanData2 :%p\n", (void*)&msg1.CanData1[0], (void*)&msg1.CanData1[1]);
    
        for (size_t i = 0; i < data_count; i++) {
            printf("CanID : 0x%x, CanLen: 0x0%x, CanData 1: 0x%x", data[i]->CanID, data[i]->CanLen, *data[i]->CanData1);
    
            for (size_t j = 0; j < SIZE_CAN_DATA; ++j) {
                printf("CanData1[%zu]: 0x%x,", j, data[i]->CanData1[j]);
            }
            printf ("\n");
        }
    
        return EXIT_SUCCESS;
    }
    
    


  • Hallo John,
    danke für die Hilfe. Genau das habe ich gesucht.

    Viele Grüße

    Michael


Anmelden zum Antworten